Ruby on Rails两个表之间有两个独立的多态关联

时间:2016-03-27 19:11:34

标签: ruby-on-rails postgresql ruby-on-rails-4

我已经在这个问题上坚持了几天,我发现其他一些堆栈问题我们很相似,但解决方案没有帮助。我试图在两个表之间创建两个单独的多态关联。我有一个用户表,一个业务表和一个消息表。我不希望用户能够通过一对一的对话互相发送消息。

这是我的消息架构:

class CreateMessages < ActiveRecord::Migration
  def change
    create_table :messages do |t|
       t.references :receiver, polymorphic: true, index: true
       t.text :message
       t.boolean :status, default: false
       t.references :sender, polymorphic: true, index: true
       t.timestamps
     end
  end
end

消息模型

class Message < ActiveRecord::Base
   belongs_to :sender, polymorphic: true
   belongs_to :receiver, polymorphic: true

   scope :unread, lambda {|| where("status = false")}

end

用户模型

    has_many :messages, as: :sender
    has_many :messages_out, as: :receiver, source: :messages

商业模式

    has_many :messages, as: :sender
    has_many :messages_out, as: :receiver, source: :messages

Rails控制台

2.2.1 :060 > User.first.messages_out
User Load (1.3ms)  SELECT  "users".* FROM "users"   ORDER BY "users"."id" ASC LIMIT 1
NameError: uninitialized constant User::MessagesOut

当我尝试以发件人的身份访问邮件时,它完全正常,我得到了预期的输出。我尝试将第一个关系的名称更改为其他关系但是这两个关系都会失败。

User.first.messages

我尝试了几种变体而且它们似乎都没有工作,如果设置我的数据库或这样的模型是不明智的,这个设置无法工作请告诉我,任何其他设置将不胜感激

1 个答案:

答案 0 :(得分:1)

您需要明确说明messages_out方法应加载哪个类:

has_many :messages_out, as: :receiver, source: :messages, class_name: "Message"