0

我想在我的第一个实现中使用fields_for来管理创建has_many关系的一种形式部分。此表单部分本身是嵌套资源的一部分Rails 5:fields_for nested_attributes不保存(在创建控制器失败)

到目前为止,我能够成功呈现,保存并编辑表单,而无需fields_for嵌套表单。

当我包括在对的form_for fields_for,白名单的参数,可以和建立#NEW的对象,我在控制台中这个错误,因为它没有保存和重新呈现#NEW观点:

(0.1ms) rollback transaction 

我能做些什么才能成功保存表格以及nested_attributes?

的routes.rb

.... 
resources :projects do 
    resources :step_ones 
    resources :step_threes 
    resources :step_twos 
    resources :step_fours 
    resources :step_fives 
    resources :timelines 
end 

step_four.rb

class StepFour < ApplicationRecord 
    belongs_to :project 
    has_many :ios_devices 

    accepts_nested_attributes_for :ios_devices 
end 

ios_device.rb

class IosDevice < ApplicationRecord 
    belongs_to :step_four 
end 

_form.html.erb

<div> 
    <%= form_for([@project, @step_four]) do |f| %> 
     .... 

     <%= f.fields_for :ios_devices do |d| %> 
     <div class='form-group'> 
      <%= d.label :full_name, "Name:"%> 
      <%= d.text_field :full_name %> 
      <%= d.label :email, "Email:"%> 
      <%= d.text_field :email %> 
      <%= d.label :udid, "UDID:"%> 
      <%= d.text_field :udid %> 

     <% end %> 


     <%= hidden_field_tag :project_id, :value => @project.id %> 

     <div class='row'> 
     <span class='col-md-6'><%= button_to "Back", project_path(@project), method: :get, class:'btn btn-primary full-wide-button main-btn' %></span> 
     <span class='col-md-6'><%= f.submit 'Save Data', class: 'btn btn-primary full-wide-button'%></span> 
     </div> 
    <% end %> 
</div> 

step_fours_controller.rb

class StepFoursController < ApplicationController 

    def new 
    @project = Project.find(params[:project_id]) 
    @step_four = StepFour.new 
    3.times { @step_four.ios_devices.build } 
    end 

    def create 
    @step_four = StepFour.new(step_four_params) 
    @project = Project.find(params[:project_id]) 
    @step_four.ios_devices.each do |d| 
     puts d.full_name 
     puts d.email 
     puts d.udid 
    end 
    @step_four.project_id = params[:project_id] 
    if @step_four.save 
     flash[:success] = "Step Five Data Saved" 
     redirect_to @project 
    else 
     flash[:danger] = "Data Not Saved. Please Try Again" 
     render "new" 
    end 
    end 

    def show 
    @step_four = StepFour.where(project_id: (params[:project_id])).first 
    end 

    def update 
    @step_four = StepFour.where(project_id: (params[:project_id])).first 
    @project = Project.find(params[:project_id]) 
    if @step_four.update_attributes(step_four_params) 
     flash[:success] = "Step Four Data Saved" 
     redirect_to @project 
    else 
     flash[:danger] = "Data Not Saved. Please Try Again" 
     render 'edit' 
    end 
    end 

    def edit 
    @step_four = StepFour.where(project_id: (params[:project_id])).first 
    @project = Project.find(params[:project_id]) 
    end 

    def step_four_params 
    params.require(:step_four).permit(:iphone_name, :iphone_nickname, :android_name, ios_devices_attributes: [:id, :full_name, :email, :udid]) 
    end 

end 

回答