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



我有一个模型Member,它包含了我网站上注册成员的所有信息。然后我有了模型Message,它包含2列(实际上有3列id):

- member_id
- message_from

在表Messages中存储了用户的ID,以及如何一起聊天-当成员A向成员B发送消息时,因此在列member_id中存储了人员A的ID,并将其保存到人员Bmessage_from ID中。

我当前的关联看起来像:

class Member < ActiveRecord::Base
  has_many :messages_from
end
class Message < ActiveRecord::Base
  belongs_to :member
end

我不知道,当我尝试时,我如何从中获取存储在message_from列中的人名

- @member.messages_from.each do |mess_from|
    ={mess_from.name}

所以我得到了错误undefined method "name" for。。。如何通过存储在列message_from中的ID获取用户的名称?

编辑-更新关系:

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

给我:

- @member.messages.each do |message|
    = message.message_from.inspect # => "110"
    = message.message_from.inspect # => undefined method `name' for "110":String (I wanna get the name of person with ID 110)

我会这样做:

# 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}

最新更新