是否可以在 ruby on rails 中对关联进行分组?
Posted
技术标签:
【中文标题】是否可以在 ruby on rails 中对关联进行分组?【英文标题】:Is it possible to group associations in ruby on rails? 【发布时间】:2012-02-15 12:55:37 【问题描述】:我有一个页面,我在其中为用户显示线程列表,无论线程是由他们启动的,还是他们是启动线程的接收者。
这是我的模型:
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 的messages 表中的对话。
必须有一种方法可以将threads_as_starter 和threads_as_recipient 分组,例如all_threads 然后调用 current_user.all_threads 全部返回。
提前致谢 亲切的问候
【问题讨论】:
【参考方案1】:where('sender_id OR recipient_id = ?', 4)
应该是
where('sender_id = ? OR recipient_id = ?', 4)
或许
where('sender_id = ? OR recipient_id = ?', 4, 4)
【讨论】:
非常感谢,在哪里('sender_id = ? OR recipient_id = ?', 4, 4) 工作以上是关于是否可以在 ruby on rails 中对关联进行分组?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ruby on rails 中结合救援多个异常?