【问题标题】:How do I specify 2 foreign keys in a model in ruby on rails?如何在 ruby​​ on rails 模型中指定 2 个外键?
【发布时间】:2013-02-03 22:45:57
【问题描述】:

我希望能够轻松访问 current_users 对话。 例如

current_user.conversations

问题是当前用户既可以是发件人也可以是收件人(sender_id 或 recipient_id)

class User < ActiveRecord::Base

  has_many :conversations, :foreign_key => "sender_id"

这可行,但有时发件人是收件人,或者说某人作为发件人向某人发送了 10 条消息,而收件人没有回复任何消息,但数据库中仍然存在他们的对话。

如果我以该用户身份登录并键入 current_user.conversations,则不会出现任何内容,因为用户模型中指定的外键是 sender_id。没有办法同时指定两者吗?喜欢在sql中使用“OR”吗?

亲切的问候

【问题讨论】:

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


    【解决方案1】:

    我不相信有办法完全按照您的意愿行事,但您可能需要考虑一些替代方法:

    1) 将其拆分为两个关系,send_conversations 和 received_conversations,然后你可以定义一个方法来组合它们。

    2) 添加一个执行一些自定义 SQL 的新类方法:

    class User < ActiveRecord::Base
      def conversations
        Conversation.where("sender_id = :id OR receiver_id = :id", id: self.id)
      end
    end
    

    【讨论】:

    • 刚刚在对话模型中添加了一个类方法,类似于您在示例 2 中所做的。
    • 刚刚意识到我的代码中存在一些错误,希望这不会让您失望:) 它们现在已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多