2013-12-17 52 views
2

下午,Ransack with collection_select

我發現Ransack有點混亂。我試圖填充我的下拉列表中只有可用的值,並根據該值篩選索引,但是當我嘗試使用各種選項時,它會將所有信息都拉入包括重複項的下拉列表中。

如何創建此表單以便僅顯示可用內容並根據該內容進行搜索。

jobs_controller.rb

def index 
    @jobs = Job.all 
    @show_sub_nav = true 
    @q = Job.search(params[:q]) 
    @searches = @q.result(distinct: true) 
    @lang = Job.find_by_sql("SELECT languages FROM jobs GROUP BY languages").map &:languages 
end 

_subnav.html.erb

<%= search_form_for @q do |f| %> 
    <%= f.select "languages", options_for_select(@lang) %> 
    <%= f.submit %> 
    <% end %> 

我目前得到這個錯誤:

No valid predicate for languages

感謝您的幫助,我想真正的麻煩理解collection_select和這些form_helpers,因爲我沒有找到API文檔非常有用,所以任何鏈接都會也是有用的。

+0

爲什麼'find_by_sql'?你不能使用'Job.has_many:languages'嗎?如果你使用它,那麼'options_for_select'可能會找到它可以使用的查詢結果類型。 – Phlip

+0

你可以在控制器中使用.has_many,我認爲這只是數據庫關係,語言是一個字段列而不是模型。 –

+0

和'p @ lang'顯示一個字符串的一維數組? – Phlip

回答

4

在Ransack中,您需要在字段名稱上添加一個謂詞。如果你想要做精確匹配針對選擇,你可以做類似的選項:

<%= f.select :language_eq, @lang %> 

更多關於謂詞,看到Basic Searching頁。其他信息請見RailsCast 370

+0

愚蠢的錯誤! –