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 

回答

相關問題