【发布时间】:2012-03-29 22:10:35
【问题描述】:
我有模型Member,其中包含有关我网站上注册会员的所有信息。然后我有模型Message,它包含 2 列(实际上是 3 列,id):
- member_id
- message_from
在Messages表中存储了用户的ID,如何一起聊天-当成员A向成员B发送消息时,在member_id列中被保存的人 A 的 ID 和列 message_from 人 B 的 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 获取用户名?
EDIT - 更新关系:
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)
【问题讨论】:
-
我不太理解您的 - 和 = 标志,但不应该是
member.name而不是mess_from.name因为消息没有名称而是它的名称具有名称的成员条目;) -
您需要
has_many :messages以及外键规范。 -
@MarkThomas 我尝试按照您的建议更新代码并更新了我的原始帖子
-
您同时使用
has_one :member和belongs_to :member。这会发生冲突。在您看来,您访问的是message.message_from.nameinsted ofmessage.member.name。 (在这里你看到冲突,什么是成员?发送者,接收者?)
标签: ruby ruby-on-rails-3 model associations