0

我目前正試圖在學習rails的任務中構建一個非常簡單的嵌套表單應用程序。在這個應用程序我有三個模型legal_formanswerquestion。我有我的answers.html.erb,設置如下:「param is missing or the value is empty」嵌套形式

<%= 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 %> 

目前抓住我已經存儲了三個問題,並呈現在他們旁邊的文本輸入框;工作沒有問題。但是,當我提交這些值時,我得到「param缺失或爲空:legal_form」。

我認爲這很可能是由於我在法律_表格控制器中強烈的params配置,請參見下文。

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'控制器。 – 2014-12-05 08:54:51

+0

@Зелёный非常感謝您的回覆!我已經添加到上面的問題。 – neanderslob 2014-12-05 09:06:09

+0

請修復縮進。這有助於我們閱讀這些代碼。 – 2014-12-05 09:09:23

回答

1

嘗試在控制器

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

好點,起初沒有注意到。這應該是正確的答案。 – 2014-12-05 09:46:42

+0

謝謝你的答案安東尼。不幸的是,它已經在我的服務器上設置爲「require」。當我複製時,許可證(:legal_form)是我的錯誤。恐怕我不太理解你的答案的後半部分,它包含了「返回fields_for對象的對象」非常感謝您的幫助! – neanderslob 2014-12-05 10:27:01

+0

試着做我寫的東西,它可以幫助你 不幸的是,我現在不能嘗試它:) – AntonyFalegk 2014-12-05 12:21:42

相關問題