Использование Rails 4 и рубин 2.2, У меня есть модель пользователя, которая имеет следующие атрибутынесколько полей поиска в рельсах 4
- имя пользователя
- электронной
- активный
Теперь мне нужно создать текстовое поле поиска для имени пользователя, электронной почты и выпадающего списка для активных атрибутов. У меня есть
user.rb
def self.usernames(username)
user = all
user = user.where("username LIKE ?", "%#{username}%")
return user
end
def self.emails(email)
user = all
user = user.where("email LIKE ?", "%#{email}%")
return user
end
def self.actives(active)
user = all
user = user.where("active LIKE ?", "%#{active}%")
return user
users_controller.rb
def index
@users = User.all
@users = @users.usernames(params[:username]) if params[:username].present?
@users = @users.emails(params[:email]) if params[:email].present?
@users = @users.actives(params[:active]) if params[:active].present?
end
index.html.erb
h1>Listing Users</h1>
<div id="forms">
<%= form_tag users_path, :method=> "get" do %>
<%= label_tag :username, "Name" %>
<%= text_field_tag :username %>
<%= label_tag :email, "Email" %>
<%= text_field_tag :email%>
<%= label_tag :active, "Active" %>
<%= select_tag :active, options_for_select([['Active', true], ['Inactive', false]]) %>
<%= submit_tag "Search" %>
<%= link_to "Clear Search", request.path, class:"cancel-button" %>
<% end %>
</div>
<div id="users"><%= render "users" %></div>
<%= button_to "Create User", new_user_path, method: :get %>
schema.rb
create_table "users", force: :cascade do |t|
t.string "email", limit: 255, default: "", null: false
t.string "encrypted_password", limit: 255, default: "", null: false
t.string "reset_password_token", limit: 255
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.string "name", limit: 255
t.integer "sign_in_count", limit: 4, default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip", limit: 255
t.string "last_sign_in_ip", limit: 255
t.string "confirmation_token", limit: 255
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "unconfirmed_email", limit: 255
t.integer "failed_attempts", limit: 4, default: 0, null: false
t.string "unlock_token", limit: 255
t.datetime "locked_at"
t.datetime "created_at"
t.datetime "updated_at"
t.string "username", limit: 255
t.boolean "active", default: false
Теперь, когда я пытаюсь фильтровать по имени пользователя или по электронной почте, это не дает мне никакого результата.
Ниже приводится результат в консоли,
Started GET "/users?utf8=%E2%9C%93&username=alok&email=&active=true&commit=Search" for ::1 at 2016-04-18 13:10:09 +0530
Processing by UsersController#index as HTML
Parameters: {"utf8"=>"✓", "username"=>"alok", "email"=>"", "active"=>"true", "commit"=>"Search"}
User Load (1.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = ? ORDER BY `users`.`id` ASC LIMIT 1 [["id", 11]]
{"utf8"=>"✓", "username"=>"alok", "email"=>"", "active"=>"true", "commit"=>"Search", "controller"=>"users", "action"=>"index"}
User Load (1.0ms) SELECT `users`.* FROM `users` WHERE (username LIKE '%alok%') AND (active LIKE '%true%')
Rendered users/_users.html.erb (7.2ms)
Rendered users/index.html.erb within layouts/application (49.3ms)
Completed 200 OK in 671ms (Views: 550.7ms | ActiveRecord: 49.9ms)
я упомянул следующие должности, но получить подобный результат, не выход, Пожалуйста, дайте мне знать, если я что-нибудь не хватает,
Multiple search fields in rails
Какой тип является «активным» атрибут в модели пользователя? – mentalic
boolean и по умолчанию false – cyborg