Rails-具有两个关联的一种模型 [英] Rails - one model with two associations

查看:57
本文介绍了Rails-具有两个关联的一种模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的模型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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆