accepts_nested_attributes_for触发“无法批量分配受保护属性”警告

时间:2014-03-23 02:36:42

标签: ruby-on-rails-3 nested-forms nested-attributes

首先,这是我第一次尝试使用accepts_nested_attributes_for,所以我还在学习,希望我错过了一些小事。

所以我设置并按照示例执行accepts_nested_attributes_for,但我不断获得ActiveModel::MassAssignmentSecurity::Error at /reports Can't mass-assign protected attributes: deployment

我无法弄明白为什么,任何帮助都会感激不尽的代码如下:

报告模型:

class Report < ActiveRecord::Base
  attr_accessible :name, :weekending, :visable, :deployments_attributes
  has_many :deployments, dependent: :destroy
  accepts_nested_attributes_for :deployments, allow_destroy: true
end

部署模型:

class Deployment < ActiveRecord::Base
  attr_accessible :deployment_comments, :deployment_name, :environment, :report_id
  belongs_to :report
end

报告/ new.html.erb

<%= form_for (@report) do |f| %>

  <%= render 'shared/error_messages' %>
  <h4>Reprot Detials</h4>
  <%= f.label "Report Written By: " %>  <%= f.text_field :name %><br>
  <%= f.label "Weekending: " %>  <%= f.text_field :weekending %><br>
  <%= f.label "Visable: " %>  <%= f.text_field :visable %><br>

  <%= f.fields_for :deployment do |builder| %>
    <%= render 'reports/forms/deployment_fields', f: builder %>
  <% end %><br><br>


  <%= f.submit class: "btn btn-large btn-primary" %>

<% end %>

报告/形式/ _deployment_fields.html.erb

<h4>Deployments</h4>
  <%= f.label :deployment_name, "Name of Deployment:" %><br />
  <%= f.text_field :deployment_name %><br />
  <%= f.label :environment, "Environment of Deployment:" %><br />
  <%= f.text_field :environment %><br />
  <%= f.label :deployment_comments, "Deployment Comments:" %><br />
  <%= f.text_area :deployment_comments %><br />

报告控制器:

class ReportsController < ApplicationController

  def index
    @reports = Report.paginate(:page   => params[:page],
                               :per_page => 20,
                               :order => 'Weekending desc')
  end

  def show
    @report = Report.find(params[:id])
  end

  def new
    @report = Report.new
  end

  def create
    @report = Report.new(params[:report])
    if @report.save
      redirect_to reports_url
    else
      render 'new'
    end
  end

数据库迁移:

timestamp_create_deployments.rb

class CreateDeployments < ActiveRecord::Migration
  def change
    create_table :deployments do |t|
      t.string :environment
      t.integer :report_id
      t.string :deployment_name
      t.string :deployment_comments

      t.timestamps
    end
    add_index :deployments, [:report_id]
  end
end

timestap_create_reports.rb

class CreateReports < ActiveRecord::Migration
  def change
    create_table :reports do |t|
      t.date :weekending, :null => false
      t.string :name, :null => false
      t.boolean :visable, :default => false, :null => false

      t.timestamps
    end
  end
end

1 个答案:

答案 0 :(得分:0)

一旦我改变了

就弄清楚了
<%= f.fields_for :deployment do |builder| %>

<%= f.fields_for :deployments do |builder| %>

我发现部署字段没有显示,所以我添加了

@report.deployments.build

到我的报告控制器的新方法!

我只需要弄清楚我是否需​​要对更新/编辑方法做任何事情?