我认为这是一个微不足道的问题,但它让我不知道......
person has_many items
item has_many keywords
项目包含字段ID,person_id,名称
关键字包含字段ID,item_id,txt
在我的Person控制器中:
def find_all_items_matching_keyword(aword)
????
end
是否有一个查询返回所有项目(item.person_id = self.id)和关联的(keyword.txt = aword)
答案 0 :(得分:2)
您的代码应该类似于
def find_all_items_matching_keyword(aword)
return Item.joins(:keyword).where("keywords.txt=':keyword'",{:keyword => aword })
end
它应该进入助手(这是正确的位置)。
答案 1 :(得分:2)
这个查询非常简单,您应该使用这样的单个范围构建它:
class Item
scope :by_keyword, lambda{ |keyword| joins(:keywords).where('keywords.txt = ?', keyword) }
end
然后,您可以在控制器中查询特定人员的所有项目,如下所示:
class PersonsController
def action
@person = Person.find(params[:id])
@items_by_keyword = @person.items.by_keyword(params[:aword])
end
end
然后,您可以在视图中循环显示该列表,例如:
<% @items.by_keyword.each do |item| %>
<%= item.name %>
<% end %>
答案 2 :(得分:1)
您可以使用find_by_sql http://guides.rubyonrails.org/active_record_querying.html#finding-by-sql
如果你想与数据库无关,你应该能够
items.keywords.each do |keyword| {
#do stuff
}
activerecord应该为您延迟加载相关模型。