我已经在这个问题上坚持了几天,我发现其他一些堆栈问题我们很相似,但解决方案没有帮助。我试图在两个表之间创建两个单独的多态关联。我有一个用户表,一个业务表和一个消息表。我不希望用户能够通过一对一的对话互相发送消息。
这是我的消息架构:
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
我尝试了几种变体而且它们似乎都没有工作,如果设置我的数据库或这样的模型是不明智的,这个设置无法工作请告诉我,任何其他设置将不胜感激
答案 0 :(得分:1)
您需要明确说明messages_out
方法应加载哪个类:
has_many :messages_out, as: :receiver, source: :messages, class_name: "Message"