我有一个页面,显示一个用户的线程列表,无论是由他们启动了胎面还是他们是一个已启动的接收者。
这是我的模特:
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。
提前致谢 亲切的问候
答案 0 :(得分:0)
where('sender_id OR recipient_id = ?', 4)
应该是
where('sender_id = ? OR recipient_id = ?', 4)
或者可能
where('sender_id = ? OR recipient_id = ?', 4, 4)