Rails-具有两个关联的一种模型 [英] Rails - one model with two associations
问题描述
我的模型Member
包含有关我网站上注册会员的所有信息.然后,我有一个模型Message
,其中包含2列(实际上是3,而id
):
I have the model Member
that contains all informations about the registered member on my site. Then I have the model Message
which contains 2 columns (actually 3 with id
):
- member_id
- message_from
表Messages
中存储了用户ID,如何一起聊天-当成员 A 向成员 B 发送消息时,因此在member_id
列中已保存人 A 的ID,并保存到人 B 的ID message_from
列中.
In the table Messages
are stored IDs of user, how chatting together - when the member A send message to member B, so in the column member_id
is saved ID of person A and into the column message_from
ID of the person B.
我当前的关联如下:
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
...如何通过存储在message_from
列中的ID获取用户名?
so I get the error undefined method "name" for
... How could I get the name of the user through ID that is stored in the column 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
给我:
- @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
More to read about associations here: 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}
这篇关于Rails-具有两个关联的一种模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!