是否可以将ruby中的关联分组到轨道上?

时间:2012-02-15 12:55:38

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 rubygems

我有一个页面,显示一个用户的线程列表,无论是由他们启动了胎面还是他们是一个已启动的接收者。

这是我的模特:

  has_many :threads_as_starter, :class_name => 'MessageThread', :foreign_key => 'sender_id'
  has_many :threads_as_recipient, :class_name => 'MessageThread', :foreign_key => 'recipient_id'

我想要做的是定义一个方法,我可以将其存储在实例变量中,并在我的视图页面上循环显示current_user的线程。

当我运行时:MessageThread.where('sender_id OR recipient_id =?',4)

   1.9.3p0 :045 > MessageThread.where( 'sender_id OR recipient_id = ?', 4 )
  MessageThread Load (0.4ms)  SELECT `message_threads`.* FROM `message_threads` WHERE (sender_id OR recipient_id = 4) ORDER BY message_threads.created_at DESC
 => [#<MessageThread id: 89, message_id: 219, sender_id: 4, recipient_id: 38, status: 0, created_at: "2012-02-15 12:26:17", updated_at: "2012-02-15 12:26:17">, #<MessageThread id: 88, message_id: 218, sender_id: 2, recipient_id: 4, status: 0, created_at: "2012-02-14 13:41:19", updated_at: "2012-02-14 13:41:19">, #<MessageThread id: 87, message_id: 210, sender_id: 1, recipient_id: 2, status: 0, created_at: "2012-02-14 13:31:12", updated_at: "2012-02-14 13:31:12">] 

我很困惑为什么它会向我显示发件人或收件人ID不等于4的行。

什么查询会返回sender_id为4的所有结果,还会返回recipient_id为4的所有结果?我需要让已登录的用户查看所有当前线程的列表。由他们创建的和非他们创建的那些。

用户A和B在message_threads表中只有1个线程,但是其中任何一个都可以拥有更多线程但具有不同的用户,但每个用户只有1个。我使用这个message_thread表来引用我的消息表中的对话,我在其中使用acts_as_tree gem。

必须有一种方法可以对threads_as_starter和threads_as_recipient进行分组,例如all_threads然后调用current_user.all_threads返回all。

提前致谢 亲切的问候

1 个答案:

答案 0 :(得分:0)

where('sender_id OR recipient_id = ?', 4)

应该是

where('sender_id = ? OR recipient_id = ?', 4)

或者可能

where('sender_id = ? OR recipient_id = ?', 4, 4)