我有@selected_posts
- 一组selected_post
个对象。
每个selected_post
都有名称和信息。
我有另一个activerecord模型
PublishedPost < ActiveRecord::Base
end
我需要选择所有已发布的帖子
published_post.name == selected_post.name and published_post.info== selected_post.info
我该怎么做?
我想到的是:
PublishedPost.where("name in ? AND info in ?", @selected_posts.map(&:name) @selected_posts.map(&:info))
答案 0 :(得分:0)
问题在于,如果您有一个选定的帖子与已发布的帖子同名,而另一个选择的帖子与相同的已发布帖子具有相同的信息,则将根据两个不同的选定帖子选择发布的帖子。我不确定你想要的是什么。
最好是使用主键进行连接。
使用name而不是主键在PublishedPost类中定义连接。
class PublishedPost
belongs_to :selected_post, foreign_key: 'name', primary_key: 'name', optional: true
end
现在你可以做......
@published_posts = PublishPost.join(:selected_post).where(selected_posts: @selected_posts).where("selected_posts.info = published_posts.info")
答案 1 :(得分:0)
首先在单循环中收集name
和info
:
all_names, all_info = Array.new, Array.new
@selected_posts.each do |sp|
all_names << sp.name
all_info << sp.info
end
然后在查询中使用它,如下所示:
PublishedPost.where(name: all_names, info: all_info)