2012-03-29 3 views
1

내 사이트에 등록 된 회원에 관한 모든 정보가 들어있는 Member 모델이 있습니다. 그럼 난 2 열 (id와 실제로 3)를 포함 Message 모델이 : 테이블 Messages에서레일 - 두 개의 연관이있는 모델

- member_id 
- message_from 

사용자의 ID를 저장됩니다, 어떻게 함께 채팅 - 때 멤버 회원 B에 대한 메시지 보내기이므로 열은 저장된 사람 ID A 및 사람 message_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) 
+0

I의 힘을 이해하여 ** -'대신'mess_from.name' 사촌의 member.name' 수 **와 ** = ** 표지판,하지만 야해 메시지에는 이름이있는 멤버 항목이 아니라 이름이 있습니다.) – uday

+0

외부 키 지정과 함께 'has_many : messages'를 원합니다. –

+0

@ MarkThomas 귀하의 충고에 따라 코드를 업데이트하고 원래 게시물을 업데이트하려고 시도했습니다. – user984621

답변

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} 
+0

멋지고 훌륭했습니다! – user984621

관련 문제