2013-07-24 90 views
3

我需要過濾表中的數據。要做到這一點,我發現meta_search寶石。 我安裝meta_search,我得到這個錯誤:複選框用Ransack gem搜索

uninitialized constantActiveRecord::Associations::ClassMethods::JoinDependency 

This已經廢棄了Rails的4(框架,我使用)。所以,我安裝了ransack (rails 4 branch)(基於meta_search的gem),效果很好。問題是我需要使用meta_search的collection_checks方法來處理複選框,並且此方法在ransack中不存在。所以,問題是:在搜索中有類似於collection_checks的方法來管理複選框?或者我該怎麼做?

我有這樣的:

enter image description here

我要篩選和汽車,摩托車或兩者

回答

10

讓行,我不熟悉的元搜索,但在搜查(Rails中4 ),你可以使用這樣的事情:

機型:

class User < ActiveRecord::Base 
    has_many :user_vehicles 
    has_many :vehicles, through: :user_vehicles 
end 

class UserVehicle < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :vehicle 
end 

class Vehicle < ActiveRecord::Base 
    has_many :user_vehicles 
end 

控制器:

class UsersController < ApplicationController 
    def index 
    @q = User.search(params[:q]) 
    @users = @q.result(distinct: true) 
    end 
end 

查看:

<%= search_form_for @q , url: users_path, :html => { class: 'your-class' } do |f| %> 
    <% Vehicle.all.each do |vehicle| %> 
    <%= check_box_tag('q[vehicles_id_eq_any][]', vehicle.id) %> 
    <%= vehicle.name %> 
    <% end %> 
    <%= f.submit "Search" %> 
<% end %> 

<%= paginate(@users) %> 
    <ul> 
    <% @users.each do |i| %> 
     <li><%= i.name %></li> 
    <% end %> 
    </ul> 
<%= paginate(@users) %> 

您還可以使用寶石進行分頁,如果你還沒有使用一個。我使用Kaminari。在這種情況下,您的控制器和視圖看起來是這樣的:

控制器:

class UsersController < ApplicationController 
    def index 
    @q = User.search(params[:q]) 
    @users = @q.result(distinct: true).page params[:page] 
    end 
end 

查看:

<%= search_form_for @q , url: users_path, :html => { class: 'your-class' } do |f| %> 
    <% Vehicle.all.each do |vehicle| %> 
    <%= check_box_tag('q[vehicles_id_eq_any][]', vehicle.id) %> 
    <%= vehicle.name %> 
    <% end %> 
    <%= f.submit "Search" %> 
<% end %> 

<%= paginate(@users) %> 
    <ul> 
    <% @users.each do |i| %> 
     <li><%= i.name %></li> 
    <% end %> 
    </ul> 
<%= paginate(@users) %>