2016-12-04 3 views
1

저는 레일을 처음 사용하고 있으며 내 앱에 has_many through: 관계가 있습니다. 나는 User, MessageMessage_Recipients 모델을 가지고있다. (사용자는 많은 메시지를 가지고 있고, 메시지는 하나의 송신자를 가지고 있고, 메시지는 많은 수신자를 가지고있다. - message_recipients는 조인 테이블이다.)다중 테이블 레일스 쿼리

사용자 메시지에 포함 된 메시지보기에 메시지 보낸 사람의 이름을 표시하려고합니다. 그러나 내가 어떤 방법으로 이것을 시도 하든지 오류가 발생합니다. "Rails Way"를 고수하고 있는지 확신 할 수 없습니다.

사용자 필드는 다음과 같습니다 id, forename, surname, email

메시지 필드는 다음과 같습니다 id, sender_id, subject, bodySENDER_ID는 FK 사용자입니다

Message_Recipient 필드는 다음과 같습니다 id, user_id, message_id사용자/MESSAGE_ID 여기

내 모델입니다 FKS (이다 나는 또한 Devise를 사용하고있다.) :

class Message < ActiveRecord::Base 
    belongs_to :user, :class_name => User, :foreign_key => "sender_id"#sender 
    has_many :message_recipients 
    has_many :users, through: :message_recipients 
end 



class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :message_recipients 
    has_many :messages, through: :message_recipients 
end 



class MessageRecipient < ActiveRecord::Base 
    belongs_to :message, :class_name => Message, :foreign_key => "message_id" 
    belongs_to :user, :class_name => User, :foreign_key => "user_id" 
end 

이 내 메시지/index.html.erb입니다 :

<% @messages.each do |message| %> 
    <div class="message"> 
    <h2><%= message.subject %></h2> 
    <p>Sent by <%= message.user.forename %></p> 
    </div> 
<% end %> 

그것은 내가 기반으로 사용자의 뒤따라야의 가치를 얻을 수없는 것 같이 내가 문제가있어보기에 NoMethodError를 얻기 때문에 메시지를 보낸 사람의 sender_id.

모든 도움말/권장 사항에 대한 조언을 많이 보내 주시면 감사하겠습니다.

답변

0

연관성을 너무 과장하지 않으면 연관성이 충분하지 않을 수 있습니다. 두 개의 모델, 사용자 및 메시지 만 있으면됩니다. 메시지 테이블에는 title, text, recipient_id 및 sender_id가 포함됩니다. (발신자와 같은 소리는 데이터베이스의 수신자 드롭 다운 목록에서 선택합니다. 선택시 해당 사용자의 user_id에 플래그가 지정되고 current_user의 user_id는 발신자의 id에 대해 다른 필드로 설정됩니다. 예 Message.create ((id will will 자동 (자동)) 보낸 사람 (current_user user_id)받는 사람 (user_id), 텍스트 : "좋은 하루 되세요") 사용자 모델의 : 메시지에 속한 메시지 모델 : 사용자에게 속함 콘솔에서 사용해보십시오.

+0

당신의 대답을 주셔서 감사합니다. btw! – Chloe

+0

예, postgresql을 사용하고 계신지, user_ids 배열에 저장하는 방법을 찾으십시오. –

+0

sqlite3을 사용하고 있습니다. , 당신이 생각하는 것과 같을까요? 대단히 감사합니다. – Chloe