【问题标题】:rails : how can I use find_each with map?rails :如何将 find_each 与地图一起使用?
【发布时间】:2017-05-16 03:34:54
【问题描述】:

我有一个包含嵌套字段的表单(habtm 和accepts_nested_attributes_for)。该表单包含一个字段“关键字”,它自动完成来自 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]

谢谢!

【问题讨论】:

    标签: ruby-on-rails postgresql find each


    【解决方案1】:

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

    您可以改为通过 keyword in 在单个 SQL 调用中获取所有 ID。

    在您执行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') 的查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2018-07-30
      相关资源
      最近更新 更多