Ich habe ein Benutzer-, Gesprächs- und Nachrichtenmodell. Ein Benutzer hat viele Unterhaltungen und Nachrichten. Eine Konversation hat viele Nachrichten und Nachrichten gehören sowohl zu Benutzern als auch zu Konversationen. Sowohl das Konversations- als auch das Nachrichtenmodell haben eine user_id-Spalte.undefined Methode `Name 'für Nil: NilClass - Modell Assoziation Probleme
Wenn ich versuche, den Namen des Benutzers anzuzeigen, der einer bestimmten Nachricht zugeordnet ist, erhalte ich den undefinierten Methodenfehler.
Mein 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
Meine Nachrichten Controller
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
Meine Modelle
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
Und mein Gespräch zeigen Ansicht
<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 %>
Es ist der message.user.name, von dem Rails eine Ausnahme zu machen scheint. Ich hatte den Eindruck, dass, weil die beiden Modelle verbunden sind, ich user.name verwenden könnte?
Ich würde sehr jede Hilfe schätzen, die jemand anbieten kann, lassen Sie mich bitte wissen, wenn Sie noch etwas brauchen, um zu helfen.
Dank
könnten Sie bitte den spezifischen Fehler, den Sie erhalten (die gesamte Fehlermeldung) posten. Ich würde helfen, das Problem zu diagnostizieren. – Sean
@Sean die gesamte Fehlermeldung ist NoMethodError in Conversations # Show, undefinierte Methode 'Name 'für Nil: NilClass –
von dieser Fehlermeldung können wir daraus schließen, dass das Problem nicht Name auf Benutzer anruft, das Problem ist, dass Sie versuchen zu Rufname auf Null. Dies bedeutet, dass message.user null zurückgibt. Versuchen Sie, den Grund zu finden, warum die Nachricht nicht mit dem Benutzer verknüpft ist, und dann denke ich, dass Ihr Code funktionieren sollte (sobald diese Verknüpfung festgelegt wurde) – Sean