【发布时间】:2016-03-27 19:11:33
【问题描述】:
我已经被这个问题困扰了几天,我发现了一些其他类似的堆栈问题,但解决方案没有帮助。我正在尝试在两个表之间创建两个单独的多态关联。我有一个用户表、一个业务表和一个消息表。我不希望用户能够通过一对一的对话互相发送消息。
这是我的消息架构:
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
我尝试了几种变体,但似乎都不起作用.
【问题讨论】:
标签: ruby-on-rails postgresql ruby-on-rails-4