Rails - 一个具有两个关联的模型

时间:2012-03-29 22:10:35

标签: ruby ruby-on-rails-3 model associations

我的模型Member包含有关我网站上注册会员的所有信息。然后我的模型Message包含2列(实际上是3 id}:

- member_id
- message_from

在表Messages中存储了用户的ID,如何在一起聊天 - 当成员 A 向成员发送消息 B 时,在列{ {1}}已将人员ID A 保存到 B 的人员列member_id ID中。

我目前的协会如下:

message_from

我不知道,当我尝试

时,如何才能获得 message_from 栏中存储的人的姓名?
class Member < ActiveRecord::Base
  has_many :messages_from
end

class Message < ActiveRecord::Base
  belongs_to :member
end

因此我收到错误- @member.messages_from.each do |mess_from| ={mess_from.name} ...如何通过undefined method "name" for列中存储的ID获取用户名?

编辑 - 更新关系:

message_from

给了我:

class Member < ActiveRecord::Base
  has_many :messages
end

class Message < ActiveRecord::Base
  belongs_to :member, :foreign_key => 'user_id', :class_name => 'Member'
  has_one :member, :foreign_key => 'message_from', :class_name => 'Member'
end

1 个答案:

答案 0 :(得分:4)

我会做这样的事情:

# Untested code, please check yourself!
class Member < ActiveRecord::Base
  has_many :outgoing_messages, :class_name  => "Message", 
                               :foreign_key => :message_from_id
  has_many :incoming_messages, :class_name  => "Message",
                               :foreign_key => :message_to_id
end


class Message < ActiveRecord::Base
  belongs_to :sender, :class_name  => "Member", 
                      :foreign_key => :message_from_id
  belongs_to :receiver, :class_name  => "Member", 
                        :foreign_key => :message_to_id
end

更多关于此处关联的信息: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many

编辑:在您的观点中:

- @member.outgoing_messages.each do |message|
    ={message.receiver.name}
    ={message.sender.name}