2017-01-01 54 views
0

我有一個嵌套字段(habtm和accepts_nested_attributes_for)的窗體。該表單包含一個字段「關鍵字」,用於自動填充來自postgresql表的關鍵字。rails:我如何使用find_each和map?

這一切都很好。這是在params:

"acte"=>{"biblio_id"=>"1", "keywords"=>{"keywords"=>"judge, ordeal, "} 

我現在需要做的是採取這些關鍵字,並獲得他們的keywords_id表中的關鍵字。這些ID必須添加到連接表中。

我這樣做:

q = params[:acte][:keywords].fetch(:keywords).split(",") 
a = q.map {|e| Keyword.find_by keyword: e } 

按照導遊,find_by只返回第一個匹配字段。我想我需要使用find_each,但我不確定這一點,我無法理解。我試過這個:

q = params[:acte][:motclefs].fetch(:motclefs).split(",") 
a = Array.new 
Motclef.where(motcle: q).find_each do |mot| 
    a << mot.id 
end 

這也只能找到第一個結果,如:[251]

我正在尋找得到的是類似[1453, 252, 654]

的感謝!

回答

0

將find_by放在循環中意味着您將爲每個SQL關鍵字執行一個單獨的SQL查詢。

你可以通過做keyword in來獲得所有的ID在一個SQL調用中。

在你做了q = params[:acte][:keywords].fetch(:keywords).split(",")之後,你的q將是一組關鍵字。所以q將是["judge", " ordeal"]

你可以簡單地做Keyword.where(keyword: q).select(:id)這將產生一個查詢,如SELECT keywords.id FROM keywords where keyword in ('judge', 'ordeal')

相關問題