我的情况与ICtylor 的帖子相似。
所以我有:
user1=User.find(1);
user2=User.find(2);
written=Micropost.where("user_id=2");
written.class #=> ActiveRecord::Relation
written.length #=> 50
replied=Micropost.where("response = 2 ") #=> 1
replied.class #=> ActiveRecord::Relation
现在如果我:
alltogether= written + replied;
alltogether.class #=> Array
alltogether.length #=> 51
但是我想要一些相当于做的事情:
all_sql= Micropost.where("user_id = 2 OR response = 2")
all_sql.class #=> ActiveRecord::Relation
all_sql.length #=> 51
换句话说,我想以某种方式将一个找到的记录附加Micropost.where(...)
到另一个找到的记录Micropost.where(...)
到ActiveRecord::Relation对象中。导致相当于all_sql但分两步达到。
一点解释。应用程序的这一部分旨在为回复消息提供类似twitter 的功能。
例如:当用户User.id = 1
将此消息发送到User.id=2
:
@2: hey this is a reply.
Micropost
应用程序将使用以下参数创建一个:
@post= Micropost.create(user:1, content:"@2: hey this is a reply", response: 2)
所以response
简单地表示回复的接收者ID。如果消息不是回复类型,则response = nil
.
按照这个想法,我希望能够:
def replies_to(user)
Micropost.where("response = #{user.id}")
end
def written_posts_by(user)
Micropost.where("user_id = #{user.id}")
end
def interesting_posts(user)
replies= replies_to(user)
written= written_posts_by(user)
#And now the question arises!
new_relation= replies union written#<---How can I do this!?
end