2013-03-27 3 views
0

레일 앱에 대한받은 편지함을 만들고 있습니다. 내 _inbox.html 파일에 "< % @ user.received_messages.each do | message | %>"하지만 내가 보낸 메시지가 표시되지 않습니다. 오류 메시지가 없으며 빈 공간 만 있습니다.@ user.received_messages가받은 편지함에 대한 메시지를 표시하지 않습니다.

받은 편지함의 모든 메시지를 표시하는 데 사용해야하는 또 다른 코드가 있습니까?

_inbox.html :

<h2>Your Inbox</h2> 
<% @user.received_messages.each do |message| %> 
No messages in your Inbox 
<% end %> 

메시지 모델 :

class Message < ActiveRecord::Base 
    attr_accessible :subject, :body, :sender_id, :recepient_id, :read_at,:sender_deleted,:recepient_deleted 
    validates_presence_of :subject, :message => "Please enter message title" 

    belongs_to :sender, 
    :class_name => 'User', 
    :foreign_key => 'sender_id' 
    belongs_to :recepient, 
    :class_name => 'User', 
    :foreign_key => 'recepient_id' 

    # marks a message as deleted by either the sender or the recepient, which ever the user that was passed is. 
    # When both sender and recepient marks it deleted, it is destroyed. 
    def mark_message_deleted(id,user_id) 
     self.sender_deleted = true if self.sender_id == user_id and self.id=id 
     self.recepient_deleted = true if self.recepient_id == user_id and self.id=id 
     self.sender_deleted && self.recepient_deleted ? self.destroy : save! 
    end 

    # Read message and if it is read by recepient then mark it is read 
    def self.readingmessage(id, reader) 
     message = find(id, :conditions => ["sender_id = ? OR recepient_id = ?", reader, reader]) 
     if message.read_at.nil? && (message.recepient.user_id==reader) 
      message.read_at = Time.now 
      message.save! 
     end 
     message 
    end 

    # Based on if a message has been read by it's recepient returns true or false. 
    def read? 
     self.read_at.nil? ? false : true 
    end 


end 

메시지 컨트롤러 :

class MessagesController < ApplicationController 

    before_filter :set_user 

    def index 
    if params[:mailbox] == "sent" 
     @messages = @user.sent_messages 
    elsif params[:mailbox] == "inbox" 
     @messages = @user.received_messages 
    #elsif params[:mailbox] == "archieved" 
    # @messages = @user.archived_messages 
    end 
    end 

    def new 
    @message = Message.new 
    if params[:reply_to] 
     @reply_to = User.find_by_user_id(params[:reply_to]) 
     unless @reply_to.nil? 
     @message.recepient_id = @reply_to.user_id 
     end 
    end 
    end 

    def create 
    @message = Message.new(params[:message]) 
    @message.sender_id = @user_id 
    if @message.save 
     flash[:notice] = "Message has been sent" 
     redirect_to user_messages_path(current_user, :mailbox=>:inbox) 
    else 
     render :action => :new 
    end 
    end 

    def show 
    @message = Message.readingmessage(params[:id],@user_id) 
    end 

    def delete_multiple 
     if params[:delete] 
     params[:delete].each { |id| 
      @message = Message.find(id) 
      @message.mark_message_deleted(@message.id,@user_id) unless @message.nil? 
     } 
     flash[:notice] = "Messages deleted" 
     end 
     redirect_to user_messages_path(@user, @messages) 
    end 

    private 
    def set_user 
     @user = current_user 
    end 
end 

답변

0

당신이 메시지를 인쇄 어디 표시되지 않습니다. 다음과 같이 시도하십시오.

<h2>Your Inbox</h2> 
<% if @user.received_messages.empty? %> 
    No messages in your Inbox 
<% end %> 

<% @user.received_messages.each do |message| %> 
    <%= message.body %> 
<% end %> 
+0

합니다. 이것은 까다 롭습니다. – pwz2000

+1

모델에 정의 된 'received_messages'메소드가 어디에 있는지 알 수 없습니다. 오류 메시지가 나타나지 않았는지 확인하십시오. 오류 메시지는 구조대가 없거나 "삼키지"않았 음을 확인하십시오. – Magnuss

+0

귀하의 권리는 메시지 모델에 정의되어 있지 않습니다. 내가 모형에서 일할 수있는 방법을 찾아 낼 수 있는지 알게 될 것입니다. 지적 해 주셔서 고마워요. – pwz2000

2

마지막으로 내가 갖고있는 문제를 해결했습니다.

user.rb에서 "has many : received messages"블록을 제거해야했습니다. 그런 데프 다음과 같이 received_messages 다음 _inbox에서 그 다음

def received_messages 
     Message.received_by(self) 
    end 

이 있었다 코딩이 줄을 제거 할 전망 : 또한 빈 보여줍니다

<td><%= "#{message.sender.first_name} #{message.sender.last_name}" %></td> 
+0

해결되면 정답으로 표시하십시오. – CherryPlaysRoblox

관련 문제