0

我有一个与同一模型有两个关联的模型:

class Mail < ActiveRecord::Base
  belongs_to :user, :class_name => 'UserFrom', :foreign_key => 'user_from'
  belongs_to :user, :class_name => 'UserTo', :foreign_key => 'user_to'
end

当我在索引操作中运行以下代码时,它没有得到正确的关联模型,有什么建议吗?

@mails = Mail.where('user_to = ?', current_user.id)

在每一行上使用debug数据时,它只显示:

---
- !ruby/object:Mail
  attributes:
    id: 1
    created_at: 2013-02-13 21:17:41.962000000 Z
    updated_at: 2013-02-13 21:17:41.962000000 Z
    user_to: 1
    user_from: 2
    subject: Testing
    body: Mail body blah blah blahhh
    read:
    read_at:
4

2 回答 2

1

:class_name选项很好地告诉了 Rails……类名。在这里(我假设)您没有一个名为 UserFrom 或 UserTo 的类。您在 app/models 中有一个名为 User 的类。

class Mail < ActiveRecord::Base
  belongs_to :user_from, :class_name => 'User', :foreign_key => 'user_from'
  belongs_to :user_to,   :class_name => 'User', :foreign_key => 'user_to'
end

我将假设外键设置正确,并且它们都包含用户 ID,即使它们没有_id后缀。

至于@mails,您的查询应该有效。但是,如果您has_many :mails在用户上声明关联会更容易。这将允许您执行类似current_user.mails.

于 2013-02-13T22:18:22.970 回答
1

你不能有同名的关系。你必须重命名你的关系,这是一个例子:

class Mail < ActiveRecord::Base
  belongs_to :sender, :class_name => 'User', :foreign_key => 'user_from'
  belongs_to :receiver, :class_name => 'User', :foreign_key => 'user_to'
end

我还建议您重命名外键,例如“sender_id”和“receiver_id”,以提高可读性。

用法:

@mails = Mail.where(sender: current_user)
于 2013-02-13T22:18:42.730 回答