2016-07-07 71 views
-2

我有一個用戶,對話和消息模型。用戶has_many對話和消息。對話has_many消息,並且消息屬於用戶和對話。會話和消息模型都有一個user_id列。未定義的方法`name'爲零:NilClass - 模型關聯問題

當我嘗試顯示與特定消息關聯的用戶名時,我得到未定義的方法錯誤。

我Conversations_controller

class ConversationsController < ApplicationController 
    def create 
    @conversation = current_user.conversations.build(conversation_params) 
    if @conversation.save 
     save_conversation(@conversation) 
     flash[:notice] = "Conversation was succesfully created" 
     redirect_to conversation_path(@conversation) 
    else 
     render 'new' 
    end 
    end 

    def show 
    @conversation = Conversation.find(params[:id]) 
    save_conversation(@conversation) 
    @message = @conversation.messages.build 
    end 

我的郵件控制器

class MessagesController < ApplicationController 

    def create 
    @message = current_conversation.messages.build(message_params) 
    if @message.save 
     flash[:notice] = "Message was successfully created" 
     redirect_to conversation_path(current_conversation) 
    else 
     flash[:notice] = "Message not saved" 
     render 'new' 
    end 
    end 

    private 

    def message_params 
     params.require(:message).permit(:chat, :user_id) 
    end 

end 

我的模型

class User < ApplicationRecord 
    has_many :conversations 
    has_many :messages 
end 
class Message < ApplicationRecord 
    belongs_to :conversation 
    belongs_to :user 
end 
class Conversation < ApplicationRecord 
    belongs_to :user 
    has_many :messages, dependent: :destroy 
end 

我的談話節目視圖

<h1><%= @conversation.title %></h1> 

<p> 
    Description: <%= @conversation.description %> 
</p> 
<p> 
    Created by: <%= @conversation.user.name %> 
</p> 

<% if @conversation.messages.any? %> 
    <% @conversation.messages.each do |message| %> 
     <%= message.chat %> 
     <%= message.user.name %> 

    <% end %> 
    <% end %> 

它的message.user.name Rails似乎要例外。我的印象是,因爲這兩個模型相關聯,我可以使用user.name?

我將不勝感激任何人可以提供的幫助,請讓我知道如果你需要任何其他的幫助。

感謝

+0

請問您可以發佈具體錯誤(整個錯誤信息)。我會幫助診斷問題。 – Sean

+0

@Sean整個錯誤消息是對話#show中的NoMethodError,未定義方法'name'爲nil:NilClass –

+0

來自該錯誤消息,我們可以推斷出該問題不是在用戶上調用名稱,問題是您正在嘗試調用名稱爲零。這意味着message.user返回nil。試着找出消息不與用戶關聯的原因,然後我認爲你的代碼應該可以工作(一旦設置了該關聯) – Sean

回答

0

,因爲這是可能的:

你沒有確認該消息模型中的用戶的存在

你可能不是在你的messages_controller被分配USER_ID的值,我可能遵循的方法是:

class MessagesController < ApplicationController 
    def create 
    @message = current_conversation.messages.build(message_params) 
    @message.user = current_user # provided you have current_user set somewher 
    if @message.save 
     flash[:notice] = "Message was successfully created" 
     redirect_to conversation_path(current_conversation) 
    else 
     flash[:notice] = "Message not saved" 
     render 'new' 
    end 
    end 
    ... 
end 
相關問題