Ich suche einen neuen Datensatz innerhalb einer verschachtelten Ressource in Schienen wie nach http://guides.rubyonrails.org/routing.html zu erstellen.Wie Sie Daten von einem neuen Objekt in einer verschachtelten Ressource in Schienen speichern?
Mein Modell ist:
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
Und ich habe meine Route erklärt als
Rails.application.routes.draw do
resources :users
resources :events do
resources :entries
end
Was die Syntax für die Einträge Controller ist für mich in der Lage zu sein, einen Eintrag auf einen Link zu erstellen wie events/2/entries/new
. Dies ist, was ich habe versucht:
class EntriesController < ApplicationController
def new
@entry = Entry.new
end
def create
@entry = Entry.new(params[:entry])
if @entry.save
redirect_to @user
flash.now[:info] = "Event Created"
else
render '/create'
flash.now[:danger] = "Somthing went wrong"
end
end
def entry_params
params.require(:event_id).permit(:siCard, :course)
end
end
On von new.html.erb
ich
<%= form_for(new_event_entry_path) do |f| %>.
Aber ich kann es nicht als No route matches [POST] "/events/1/entries/new"
Vielen Dank
"Ich kann es nicht zur Arbeit bringen", was macht es oder nicht? Irgendwelche Fehler im Protokoll? Ich denke, dass 'new_event_entry_path' an eine Ereignisinstanz übergeben werden sollte und möglicherweise nur' event_entry_path' sein sollte, was bei einem Post, glaube ich, zum create path führt ... double check 'bin/rake routes' und stellen Sie sicher, dass der Name des Helfers dem Pfad (und Controller/Aktion) entspricht, den Sie zu –
'Keine Route entspricht [POST]"/Ereignisse/1/Einträge/neu "' @Simple Lime –
form_for sollte die Instanzvariable übergeben werden '@ Eintrag'. z.B. 'form_for (@entry)'. Die Instanzvariable sollte aus der Verschachtelung z.B. '@event = Event.find (params [: event_id]); @entry = @ event.entries.build' Ich habe keine Ahnung, wie Sie in diesem Fall auf "user" zugreifen, aber das sollte auch in das Entry-Objekt eingebaut sein. – engineersmnky