Rails 4 Nested Form.

匿名 (未验证) 提交于 2019-12-03 08:54:24

问题:

I am building a dynamic form for a client. A form has many form questions which has many form answers. As of now, I am able to create everything nicely in Active Admin and have it displaying through the show action on the app interface. Here is the problem I have. I want to display the form title (which is working), along with the form questions (which is working), along with input fields to submit new form answers on the fly (which is the part that is not working). I feel like I have exhausted everything when it comes to nested forms. I will post my code below.

Form

<%= form_for @form do |f| %>   <div class="field">     <h1><%= @form.name %></h1>   </div>   <%= f.fields_for :form_questions do |ff| %>     <div class="field">       <%= ff.label :title  %>       <%= ff.text_field :form_answers %>     </div>   <% end %>   <div class="form-actions">     <%= f.button :submit %>   </div> <% end %> 

Here is the models

class Form < ActiveRecord::Base   has_many :form_questions, dependent: :destroy   accepts_nested_attributes_for :form_questions, allow_destroy: true end 

class FormQuestion < ActiveRecord::Base   belongs_to :form   has_many :field_types   has_many :form_answers, dependent: :destroy   accepts_nested_attributes_for :field_types   accepts_nested_attributes_for :form_answers end 

class FormAnswer < ActiveRecord::Base   belongs_to :form_question end 

And my form controller

class FormsController < ApplicationController    def new     @form = Form.new     # form_questions = @form.form_questions.build     # form_answers = form_questions.form_answers.build   end    def create     @form = Form.new(form_params)   end    def index     @forms = Form.includes(:form_questions).all   end    def show     @form = Form.find(params[:id])   end    def edit     @form = Form.find(params[:id])   end    def form_params     params.require(:form).permit(:id, :name, form_questions_attributes: [:title, form_answers_attributes: [:answer]])   end   end 

回答1:

Firstly,you should uncomment those two lines in your new method.I guess they are correct.

def new  @form = Form.new  @form_questions = @form.form_questions.build  @form_answers = @form_questions.form_answers.build end 

And in your create action,you are not saving the data

def create  @form = Form.new(form_params)  if @form.save    .....  else   .....  end end 

Secondly,your form code should look like this

<%= form_for @form do |f| %>   <div class="field">     <h1><%= @form.name %></h1>   </div>   <%= f.fields_for @form_questions do |ff| %>     <div class="field">       <%= ff.label :title %>       <%= ff.text_field :title %>     </div>       <%= ff.fields_for @form_answers do |fa| %> #Here comes the important step       <div class="field" %>         <%= fa.label :answer %>         <%= fa.text_field :answer %>       </div>     <% end %>    <% end %>   <div class="form-actions">     <%= f.button :submit %>   </div> <% end %> 


文章来源: Rails 4 Nested Form.
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!