2012-05-24 45 views
3

當我使用'ransack',一個Rails Serving寶石時,我迷路了。Rails的Ransack搜索與check_box相關的模型

我想要做的是工作複選框爲一個asociated模型。

這是我的代碼。

shows_controller.rb

class ShowsController < ApplicationController 
def index 
    @q = Show.search(params[:q]) 
    @shows = @q.result(:distinct => true) 
    @shows = @shows.joins(:tickets) 

    respond_to do |format| 
     format.html # index.html.erb                          
     format.json { render json: @shows } 
    end 
end 

index.html.erb

<%= search_form_for @q do |f| %> 
    <%= f.label "Show's Title: " %> 
    <%= f.search_field :title_cont %> 
    <%= f.label "Buy at:" %> 
    <%= check_box_tag 'q[shows_tickets_store_cont[]]', 'venue' %>At Venue 
    <%= check_box_tag 'q[shows_tickets_store_cont[]]', 'ticketmaster' %>Ticketmaster 
    <%= submit_tag "Find Now" %> 
<% end %> 

<% @shows.each do |show| %> 
    <%= show.title %> | 
    <% show.tickets.each do |ticket| %> 
    <%= ticket.store %><br /> 
    <% end %> 
<% end %> 

show.rb

class Show < ActiveRecord::Base 
    has_many :tickets 
end 

ticket.rb

class Ticket < ActiveRecord::Base 
    belongs_to :show 
end 

當我在search_field中寫了一些東西時,選中了「check_box」並點擊「Find Now」按鈕,日誌顯示如下;

Parameters: {"utf8"=>"✓", "q"=>{"title_cont"=>"something", "shows_tickets_store_cont"=>"venue"}, "commit"=>"Find Now"} 
Show Load (1.1ms) SELECT DISTINCT `shows`.* FROM `shows` INNER JOIN `tickets` ON `tickets`.`show_id` = `shows`.`id` WHERE (`shows`.`title` LIKE '%something%') LIMIT 25 OFFSET 0 

我不知道爲什麼SQL不具有Ticket.store WHERE條款,儘管收到「shows_tickets_title_cont」 =>「場地」票控制器。

請爲此建議解決方案。

在此先感謝。

回答

4

其實問題是因爲你的第二個關鍵是:shows_tickets_store_con但應該是shows_tickets_store_cont。它接受屬性,如果它有謂詞_cont

洗劫文檔:

https://github.com/ernie/ransack

cont (contains) and start (starts with) are just two of the available search predicates. See Constants for a full list. 

#編輯了1

我做過調查了一下。

我不認爲你的方法適合你的情況。如果所有的checkboxes被選中,那麼你的元搜索會遇到問題 - 你必須設置另一個predicate。在你的情況下,它可能是謂詞 - 因爲你使用multiple values(複選框)。

讓SQL這樣的:

"shows_tickets_store" IN ('venue','something') 

可能的謂詞:

也這樣說的:

+0

我糾正我的錯字。 –

+0

我認識到我應該使用思維獅身人面像或太陽黑子或elasticSearch。 –

+0

我已經更新了我的答案。 – thesis