Ruby on rails Rails获得关联模型

Ruby on rails Rails获得关联模型,ruby-on-rails,ruby,model,belongs-to,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 在每行上使用debug时,数据仅显示以下内容: --- - !ru

我有一个模型,同一个模型有两个关联:

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
在每行上使用
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:

:class_name
选项告诉Rails。。。类名。这里(我假设)没有名为UserFrom或UserTo的类。您有一个名为“应用程序/模型中的用户”的类

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
class-Mail'user',:foreign\u key=>'user\u from'
属于:用户\u到,:类\u名称=>'user',:外部\u键=>'user\u到'
结束
我将假设外键设置正确,并且它们都包含用户id,即使它们没有
\u id
后缀


至于
@邮件
,您的查询应该可以工作。但是如果你在你的用户上声明一个
有很多:邮件
关联,那就容易多了。这将允许您执行类似于
current\u user.mails

的操作。您不能将关系命名为相同的关系。您必须重命名您的关系,这是一个示例:

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

只需进入数据库,更改外键并将_id附加到每个外键。在控制器中,我使用了您提供的where子句,但是它出现了一个错误:“SQL错误或缺少数据库(没有这样的列:mails.sender)”。。。。我冒昧猜测一下,这是因为我没有正确创建关系,是否需要执行任何其他操作来建立关系?您必须将邮件迁移更改为使用
t.references:sender
,以便在这种情况下创建
sender\u id
列。还要确保更新邮件模型上的
:foreign\u key
选项以反映该更改。我已成功迁移了两个引用并使用“@mails=Mail.where(receiver\u id:current\u user)”来获取邮件,但是我仍然无法获取每个邮件的关联用户。我错过了什么?
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
@mails = Mail.where(sender: current_user)