2017-01-01 55 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')

相关问题