我有2个模型:文档和关键字。它们相互关联,彼此accepts_nested_attributes_for
,所以我可以创建一个嵌套的形式。这很好用。
所以在params中,我有
"document"=>{"book_id"=>"1", "keywords"=>{"keywords"=>"term, administration, witness "}, ...
在控制器中,我将关键字放在一个单独的数组中:
q = params[:document][:keywords].fetch(:keywords).split(",")
这也很有效。
我现在需要做的是获取关键字ID并将它们放入数组中。该数组的每个元素都将填充连接表。
我试过这个:
a = Array.new
q.each do |var|
id = Keyword.select(:id).find_by keyword: var
a << id
id
end
但是,这只回答[#<Keyword id: 496>, nil, nil]
,尽管服务器日志显示所有3个SQL请求都已执行且它们是正确的。
我也试过这个:
a = Array.new
q.map do |e|
Keyword.where(motcle: e).select(:id).find_each do |wrd|
a << wrd.id
end
end
然后,这只返回关键字的FIRST id,尽管服务器日志显示所有3个SQL请求都已执行。
我想要得到的是a = [496, 367, 2398]
所以我有两个问题:
1 /尽管服务器执行了所有SQL请求,为什么不将id添加到数组中?
2 /如何在rails中写入请求
SELECT "motclefs"."id" FROM "motclefs" WHERE "motclefs"."motcle" in ('déchéances','comtesse') ORDER BY "motclefs"."id";
谢谢!
答案 0 :(得分:1)
返回的值是关键字的对象。您需要获取对象的id属性。例如:
id = Keyword.where(keyword: var).select(:id).first.id
获得所有ID的更好方法是
a = Keyword.where(keyword: ['term', 'administration', 'witness']).pluck(:id)
# I think this might answer your second question.