Rails获得相关模型

时间:2013-02-13 22:12:55

标签: ruby-on-rails ruby model belongs-to

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

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:

2 个答案:

答案 0 :(得分: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

之类的操作

答案 1 :(得分: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)
相关问题