2017-12-06 1 views
0

Ich versuche eine verschachtelte Ressource in Schienen zu verwenden, um einen neuen Datensatz zu erstellen. Ich versuche, von /events/id/entries/new zu verwenden, wo es eineSpeichern von Werten aus einem HTTP-Post von einer verschachtelten Ressource?

<%= form_for([@event, @entry]) do |f| %> 

auf der neuen Seite ist.

Meine Modelle sind:

class Entry < ApplicationRecord 
    belongs_to :user 
    belongs_to :event 

class User < ApplicationRecord 
    has_many :entries, dependent: :destroy 

class Event < ApplicationRecord 
    has_many :entries, dependent: :destroy 

Der Controller ist:

def new 
    @event = Event.find(params[:event_id]) 
    @entry = @event.entries.build 
end 

def create 
    @user = current_user 
    @entry = Entry.new(user_id: @user.id, event_id: :event_id , course: :entry.course , siCard: :entry.siCard) 
    if @entry.save 
    redirect_to @user 
    flash.now[:info] = "Event Created" 
    else 
    render '/create' 
    flash.now[:danger] = "Somthing went wrong" 
    end 
end 

Aber der Rekord nicht NoMethodError in EntriesController#create obwohl es nicht speichern sagen, dass die übergebenen Parameter sind.

"utf8"=>"✓", 
"entry"=>{"course"=>"Orange", "siCard"=>"23232323"}, 
"commit"=>"Enter", 
"event_id"=>"2"} 

Wie kann ich den Erstellungscontroller ändern, um den Datensatz zu speichern?

+0

Im Allgemeinen ist es eine gute Übung, mehr von Ihrem Stack-Trace hinzuzufügen, damit die Leute Ihnen helfen können. – jvillian

Antwort

0

Geben Sie diese ein zu gehen:

@entry = Entry.new(
    user_id: current_user.id, 
    event_id: params[:event_id], 
    course: params[:entry][:course], 
    siCard: params[:entry][:siCard] 
) 

Sie brauchen nicht zu @user = current_user, nur current_user.id verwenden.

event_id: :event_id wird einfach event_id zu einem Symbol gesetzt. Sie wollen auf den Parameter Wert zugreifen, ich rate. Also:

event_id: params[:event_id] 

hier:

course: :entry.course 

Sie versuchen, die course Methode auf dem :entry Symbol zu nennen. Was?!?

Statt:

course: params[:entry][:course] 

Die gleiche Sache mit siCard.

BTW, siCard ist nicht sehr Ruby-ish. Stattdessen sollten Sie si_card tun.

+0

Haben Sie irgendwelche Bücher, um Rubine und Schienen richtig zu lernen? –

+0

Wie viele Leute begann ich mit Michael Hartls [Tutorial] (https://www.railstutorial.org/book). [Programming Ruby] (https://pragprog.com/book/ruby/programming-ruby) ist auch beliebt. Es gibt viele andere gute Bücher und Tutorials, zu viele, um sie zu erwähnen. – jvillian

Verwandte Themen