레일 앱에 대한받은 편지함을 만들고 있습니다. 내 _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
합니다. 이것은 까다 롭습니다. – pwz2000
모델에 정의 된 'received_messages'메소드가 어디에 있는지 알 수 없습니다. 오류 메시지가 나타나지 않았는지 확인하십시오. 오류 메시지는 구조대가 없거나 "삼키지"않았 음을 확인하십시오. – Magnuss
귀하의 권리는 메시지 모델에 정의되어 있지 않습니다. 내가 모형에서 일할 수있는 방법을 찾아 낼 수 있는지 알게 될 것입니다. 지적 해 주셔서 고마워요. – pwz2000