Я хочу использовать одну форму для отправки данных в две таблицы: Вопросы и ответы.Проблемы с маршрутом при использовании nested_attributes в Rails 4
Для этого я использую accepts_nested_attributes_for
как outlined here. Вот мой Question.rb модель:
class Question < ActiveRecord::Base
has_many :answers
belongs_to :category
accepts_nested_attributes_for :answers, :allow_destroy => true
end
Тогда в моей _form
зрения, я использую:
<% form_for(@question, :url => question_path(@question)) do |f| %>
<% f.text_field :question_text %>
<% f.fields_for :answers do |builder| %>
<%= builder.text_field :answer_text %>
<% end %>
<% end %>
Это создает путаницу ошибку: No route matches {:action=>"show", :controller=>"questions", :id=>nil} missing required keys: [:id]
.
Даже если я вручную добавлю идентификатор к параметрам (например, http://localhost:3000/triviabuilder/new?id=1), я все равно получаю эту ошибку.
Нужно ли мне указывать ID в параметрах, и если да, то это должно быть сделано в контроллере?
EDIT - Добавление routes.rb
Example::Application.routes.draw do
resources :games
resources :questions
resources :answers
resources :triviabuilder
devise_for :users
root "pages#home"
get "triviabuilder" => "triviabuilder#index"
get "new_triviabuilder" =>"triviabuilder#new"
EDIT 2 - Добавление TriviaBuilder контроллер пытается вызвать таблицу Вопрос, так как она включает в себя nested_attributes
class TriviabuilderController < ApplicationController
def new
@question = Question.new
end
def create
@question = question.new(params[:question])
if @question.save
redirect_to triviabuilder_path, :notice => "Your post was saved"
else
render "new"
end
end
end
Это производит ошибка «show» для No route matches {:action=>"show", :controller=>"triviabuilder"} missing required keys: [:id]
.
вы упомянули шоу-ACTION после отправки формы ..поэтому он дает вам ошибку –
'<% form_for (@question) do | f | %> 'измените строку, как я упомянул –
Пожалуйста, покажите ** ** route.rb ** – dp7