Я пытаюсь создать вложенный ресурс, чтобы продукты могли иметь заметки, связанные с ними. Я установил связи внутри модели и т. Д., Но когда я пытаюсь использовать форму для создания новой заметки, я получаю следующую ошибку:
NoMethodError in Notes#create
Showing /Users/myusername/myapp/app/views/notes/_form.html.erb where line #2 raised:
undefined method `notes_path' for #<#<Class:0x00007fb3630b1ad0>:0x00007fb361eab868>
Это строка, к которой она относится:
<%= simple_form_for [@product, @note] do |f| %>
Это новые действия & create в контроллере заметок:
def new
@product = Product.find(params[:product_id])
@note = @product.notes.build
end
def create
@note = Note.new(product: @product)
respond_to do |format|
if @note.save
format.html { redirect_to product_notes, notice: 'Note was successfully created.' }
else
flash.now[:error] = "It doesnt work"
render 'new'
end
end
end
и частичная форма:
<%= simple_form_for [@product, @note] do |f| %>
<%= f.error_notification %>
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
<div class="form-inputs">
<%= f.input :content %>
<%= f.input :author %>
<%= f.check_box :visible %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
Я хожу по кругу с внесением изменений и, похоже, не могу найти никакой документации по вложенным ресурсам, которая не считается устаревшей. Кто-нибудь может помочь, пожалуйста?
Отредактировано, чтобы добавить:
Я изменил действие моего контроллера на что-то, основываясь на ответе PGill, и теперь могу загрузить страницу без ошибки контроллера действий. Однако теперь он повторно отображает новую форму заметки с ошибками, указывающими, что поля формы не могут быть пустыми. Они не были пустыми, когда я отправил их - что происходит, чтобы вызвать это?
Обновлено действие контроллера:
def create
@product = Product.find(params[:product_id])
@note = @product.notes.new
respond_to do |format|
if @note.save
format.html { redirect_to product_notes_path(@product), notice: 'Note was successfully created.' }
else
format.html { render :new, notice: 'Note failed to be created.' }
end
end
end
Когда я ранее получал ошибки, он имел это в качестве параметров запроса, поэтому они передаются?
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"lotsofletters",
"note"=>{"content"=>"test", "author"=>"test", "visible"=>"0"},
"commit"=>"Create Note",
"product_id"=>"1"}