我有一个具有嵌套字段的表单(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]
谢谢!
答案 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)
等查询。