2

Mit Rails 4 und Rubin 2.2, Ich habe meine User-Modell, dasMehrere Suchfelder in Schienen 4

  1. Benutzername
  2. E-Mail
  3. aktiv
hat folgende Attribute

Jetzt muss ich ein Suchtextfeld für Benutzername, E-Mail und Dropdown für aktive Attribute erstellen. Ich habe meine

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 

Nun, wenn ich von Benutzernamen oder E-Mail zu filtern, ich versuche, es gibt mir kein Ergebnis.

Nach ist das Ergebnis in der Konsole,

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) 

ich folgende Post genannt habe, aber ähnliches Ergebnis bekommen, keine Ausgabe, Bitte lassen Sie mich wissen, wenn ich etwas fehle,

Multiple search fields in rails

+0

Welche Art ist das ‚aktive‘ Attribut in Ihrem Benutzermodell das Ransack Juwel, um zu versuchen, das wollen? – mentalic

+0

Boolean und Standard auf falsch – cyborg

Antwort

0

Das Problem scheint in der Funktion def self.actives (active) zu liegen

Versuchen Sie, es in

zu ändern
def self.actives(active) 
    user = all 
    user = user.where("active = ?", active) 
    return user 
end 

Sie könnten auch leicht hinzufügen/entfernen Sie Felder in einem Suchformular https://github.com/activerecord-hackery/ransack

+0

Danke, es funktioniert jetzt – cyborg