【问题标题】:accepts_nested_attributes_for triggering a 'Can't mass-assign protected attributes warningAccepts_nested_attributes_for 触发“无法批量分配受保护的属性”警告
【发布时间】:2014-03-23 02:36:42
【问题描述】:

首先,这是我第一次尝试使用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 %>

report/forms/_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

【问题讨论】:

  • 另外,如果我更改 New.html.erb 以便 ' ' 是 '' 那么部署字段不会显示??

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


【解决方案1】:

所以想通了,一旦我改变了

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

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

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

@report.deployments.build

我的报表控制器的新方法!

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

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多