2016-04-25 12 views
-3

Wir arbeiten gerade an einer Website für einen wichtigen Kunden, und wir sind in eine Straßensperre geraten, die einen weiteren Fortschritt verhindert hat. Wir arbeiteten an Beziehungen zwischen Datenbanktabellen, und eine der Tabellen erkennt die oben genannte Methode nicht. Hier ist der Code:undefined methode 'name' in nil: NilClass

organizers_controller.rb:

# GET /organizers.json 
def index 
    @organizers = Organizer.all 
end 

# GET /organizers/1 
# GET /organizers/1.json 
def show 
end 

# GET /organizers/new 
def new 
    @organizer = Organizer.new 
end 

# GET /organizers/1/edit 
    def edit 
end 

# POST /organizers 
# POST /organizers.json 
def create 
    @organizer = Organizer.new(organizer_params) 

respond_to do |format| 
    if @organizer.save 
    format.html { redirect_to @organizer, notice: 'Organizer was successfully created.' } 
    format.json { render :show, status: :created, location: @organizer } 
    else 
    format.html { render :new } 
    format.json { render json: @organizer.errors, status: :unprocessable_entity } 
    end 
end 
end 

# PATCH/PUT /organizers/1 
# PATCH/PUT /organizers/1.json 
def update 
    respond_to do |format| 
    if @organizer.update(organizer_params) 
     format.html { redirect_to @organizer, notice: 'Organizer was successfully updated.' } 
    format.json { render :show, status: :ok, location: @organizer } 
    else 
    format.html { render :edit } 
    format.json { render json: @organizer.errors, status: :unprocessable_entity } 
    end 
end 
end 

# DELETE /organizers/1 
# DELETE /organizers/1.json 
def destroy 
    @organizer.destroy 
    respond_to do |format| 
    format.html { redirect_to organizers_url, notice: 'Organizer was successfully destroyed.' } 
    format.json { head :no_content } 
end 
end 

private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_organizer 
    @organizer = Organizer.find(params[:id]) 
    end 

# Never trust parameters from the scary internet, only allow the white list through. 
def organizer_params 
    params.require(:organizer).permit(:name) 
end 
end 

show.html.erb:

<p id="notice"><%= notice %></p> 

<p> 
    <strong>Title:</strong> 
    <%= @event.title %> 
    <strong>Organization</strong> 
    <%= @organizer.name %> 
</p> 

<%= link_to 'Edit', edit_event_path(@event) %> | 
<%= link_to 'Back', events_path %> 

Relevante Fehler:

undefined method `name' for nil:NilClass 

Excuse die Abstandsprobleme, der Code übersetzte nicht gut in den Codeblock

+0

'@ Veranstalter' ist Null, so erhalten Sie diesen Fehler. – dp7

+0

Sind Sie sicher, dass die Fehlermeldung korrekt ist? Ich würde eher "undefined Methode' title' "erwarten, da Sie scheinbar die Instanzvariable '@Organizer' festgelegt haben, aber die Instanzvariable' @ event' ist nicht gesetzt. –

+0

Woher bekommst du @event? –

Antwort

0

Wenn Sie die Organizer.title Zeile auskommentieren. Sehen Sie, wenn Sie andere Fehler bekommen. Es bringt dich auf den richtigen Weg. Gehen Sie auch in die Konsole und machen Sie sich mit den Beziehungen herum. Du hast die Beziehung nicht gepostet, daher ist es schwer zu wissen. Etwas wie event.organizer.name könnte nessecary sein.

0

Also, nach einigem Gespräch mit Kollegen, habe ich die Antwort auf mein Problem herausgefunden. Merkwürdigerweise war es so eine einfache Antwort. Ich brauche nur <% = @ organizer.name%> zu ändern:

<% @event.organizers.each do |organizer| %> 
    <%= organizer.name %> 
<% end %> 

Die Tatsache, dass es sich um eine many-to-many war Beziehung und die Tatsache, dass zeigt keinen Zugriff auf den @organizer Variable hat. Diese Schleife war also notwendig, um die korrekten Informationen anzuzeigen. Danke für die Antworten jedenfalls, froh, dass du dir die Zeit genommen hast!

Verwandte Themen