2013-03-27 47 views
0

我正在構建自定義收件箱,並且在添加此行以獲取所有要顯示的郵件後,「<%user.received_messages.each do | message |%>」我現在正在獲取「未定義的局部變量或方法`用戶'「錯誤。不知道爲什麼額外的編碼行會導致這個錯誤以及如何解決它。郵件中的NameError#用戶索引

_inbox.html:

<h2>Your Inbox</h2> 
<% user.received_messages.each do |message| %> 
No messages in your Inbox 
<% end %> 
     <%= form_tag delete_multiple_user_messages_path, :method=>:post do %> 
      <table class="table table-bordered"> 
        <tr> 
        <th>Delete?</th> 
        <th>Sent</th> 
        <th>Sender</th> 
        <th>Sent</th> 
       </tr> 
        <% for message in @messages %> 
         <tr> 
          <td><%= check_box_tag "delete[]", message.id %></td> 
          <td> 
           <% if message.read? %> 
            <%= link_to h(message.subject), user_message_path(@user, message) %> 
           <% else %> 
            <%= link_to "#{h(message.subject)} (unread)", user_message_path(@user, message) %> 
           <% end %> 
          </td> 
          <td><%= "#{message.sender.first_name} #{message.sender.last_name}" %></td> 
          <td><%=h message.created_at.to_s(:long) %></td> 
         </tr> 
      <% end %> 
      </table> 
     <%= submit_tag "Delete selected" %> | 
     <% end %> 
<%= link_to "Compose New Message", new_user_message_path(@user)%> | 
<%= link_to "View Sent Messages", user_messages_path(current_user, :mailbox => :sent)%> 

的index.html:

<% if params[:mailbox] == "sent" %> 
     <%= render :partial => "sent" %> 
<% elsif params[:mailbox] == "inbox" %> 
     <%= render :partial => "inbox" %> 
<% elsif params[:mailbox] == "archieved" %> 
     <%= render :partial => "inbox" %> 
<% end %> 

messages_controller:

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 

回答

2

那是因爲你沒有助手方法命名user。也許你在Messages控制器中有current_user或實例變量@user

UPDATE

也許你想user變量傳遞給分?那麼你需要改變render這樣的電話:<%= render :partial => "inbox", :user => some_user_instance %>

+0

我有def set user。添加了原始帖子的控制器。 – pwz2000 2013-03-27 13:32:49

+2

因此,您需要使用@user使其工作。無論如何,請參閱我的更新 – 2013-03-27 13:34:27

+0

簡單修復。謝謝。 – pwz2000 2013-03-27 13:38:57