0

В настоящее время я пытаюсь создать действительно простое вложенное приложение формы в своем стремлении изучить рельсы. В этом приложении у меня есть три модели: legal_formanswer и question. У меня есть мой answers.html.erb, настроить следующим образом:«param отсутствует или значение пусто» в вложенной форме

<%= form_for (@legal_form) do |f| %> 
<h1>Title <%= @legal_form.title %></h1> 
<p><%= @legal_form.description %></p> 
<ul> 
    <% @legal_form.questions.each do |question| %> 
    <%= fields_for question.answers.build do |q| %> 
     <li> 
     <%= question.question_content %> 
     <%= q.text_field :answer_content %> 
     </li> 
    <% end =%> 
    <% end %> 
</ul> 

<p><%= f.submit "Submit" %></p> 
<% end %> 

который в настоящее время хватает на три вопроса, я сохранные и делает ввода текста флажки рядом с ними; работает без проблем. Однако, когда я отправляю значения, я получаю «параметр отсутствует или пуст: legal_form».

Я полагаю, что это, скорее всего, связано с моей сильной настройкой параметров в контроллере legal_forms, см. Ниже.

class LegalFormsController < ApplicationController 
    before_action :find_legal_form, only: [:show, :edit, :update, :destroy, :answers] 

    def index 
    @legal_form = LegalForm.all.order("created_at DESC") 
    end 

    def show 
    end 

    def new 
    @legal_form=LegalForm.new 
    end 

    def create 
    @legal_form = LegalForm.new(legal_form_params) 

    if @legal_form.save 
     redirect_to @legal_form, notice: "Successfully created new legal form." 
    else 
     render 'new' 
    end 
    end 

    def edit 
    end 

    def update 
    if @legal_form.update(legal_form_params) 
     redirect_to @legal_form 
    else 
     render 'edit' 
    end 
    end 

    def destroy 
    @legal_form.destroy 
    redirect_to root_path, notice: "Successfully deleted form" 
    end 

    def answers 
    @[email protected]_form.questions 
    @legal_form=LegalForm.find(params[:id]) 
    end 
    private 

    def legal_form_params 
    params.reqire(:legal_form).permit(:title, :description, :questions_attribute => [:id, :question_number, :question_content, :_destroy, :answer_attributes => [:id, :answer_content, :question_id, :user_id]]) 
    end 

    def find_legal_form 
    @legal_form=LegalForm.find(params[:id]) 
    end 
end 

И, в случае, если это полезно, вот модели для каждого.

class Answer < ActiveRecord::Base 
    belongs_to :question 
end 

class LegalForm < ActiveRecord::Base 
    has_many :questions, :dependent => :destroy 

    has_many :answers, through: :entity_roles 

    accepts_nested_attributes_for :questions, 
    reject_if: proc { |attributes| attributes['question_content'].blank? }, 
    allow_destroy: true 

end 

class Question < ActiveRecord::Base 
    belongs_to :legal_form 
    has_many :answers 
    accepts_nested_attributes_for :answers, 
    reject_if: proc { |attributes| attributes['question_content'].blank? }, 
    allow_destroy: true 
end 

Кроме того, в соответствии с просьбой вот мой маршруты файл:

Rails.application.routes.draw do 
    resources :legal_forms do 
    member do 
     get 'answers' 
    end 
    end 

    resources :answers 

    root "legal_forms#index" 
end 

Любая помощь, чтобы, наконец, победить вложенные формы было бы весьма признателен. Я уже несколько недель ударяю головой об этом. Спасибо заранее.

+0

пожалуйста показать ваш 'routes.rb' работает, и полный' legal_forms' контроллер. –

+0

@ Зелёный Большое спасибо за ответ! Я добавил оба вопроса выше. – neanderslob

+0

Исправьте углубление. которые помогают нам читать этот код. –

ответ

1

Try в контроллере

def legal_form_params 
    params.require(:legal_form).permit(...) 
end 

Также question.answers.build добавить к методу контроллера и вызова объекта, который возвращает ответы на fields_for

UPDATE

Чтобы отправить эту форму, ваши результаты, вероятно, должны быть такими

формуляр

<%= f.fields_for :answers do |q| %> 
     ... 
<% end =%> 

в новом методе

def new 
    @legal_form=LegalForm.new 
    @answers = @legal_form.question.answers.build 
end 

def legal_form_params 
    params.require(:legal_form).permit! #temporarily 
end 

не пробовал, но представьте себе, как это что-то вроде этого

+0

хорошо пункт, не заметил в начале. Это должен быть правильный ответ. –

+0

спасибо за ответ Энтони. К сожалению, он уже был настроен на 'require' на моем сервере; разрешение (: legal_form) было ошибкой с моей стороны, когда я скопировал его. Боюсь, что я не совсем понимаю вторую половину вашего ответа относительно включения «объекта, который возвращает ответы на fields_for». Большое спасибо за помощь! – neanderslob

+0

Попробуйте сделать то, что я написал, это может немного помочь вам К сожалению, я не могу попробовать это сейчас :) – AntonyFalegk

Смежные вопросы