rails:如何在地图中使用find_each?

时间:2017-01-01 23:17:17

标签: ruby-on-rails postgresql find each

我有一个具有嵌套字段的表单(habtm和accepts_nested_attributes_for)。该表单包含一个字段“keywords”,它自动填充来自postgresql表的关键字。

一切运作良好。这是在参数:

"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]

谢谢!

1 个答案:

答案 0 :(得分:0)

将find_by放在循环中意味着您将为每个SQL关键字执行单独的SQL查询。

您只需通过执行Try Dim wsProd As New wsHelloWorldMSTprod.HelloWorldMSTSoapClient() wsProd.Open() Select Case rblSelectHelloWorldType.SelectedIndex Case 0 strOut = wsProd.HelloWorld1() Case 1 strOut = wsProd.HelloWorld2() Case Else End Select wsProd.Close() Catch ex As Exception End Try 即可在单个SQL调用中获取所有ID。

执行keyword in后,您的q = params[:acte][:keywords].fetch(:keywords).split(",")将是一系列关键字。因此q将是q

您只需执行["judge", " ordeal"]即可生成Keyword.where(keyword: q).select(:id)等查询。