首先,这是我第一次尝试使用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
答案 0 :(得分:0)
一旦我改变了
就弄清楚了<%= f.fields_for :deployment do |builder| %>
到
<%= f.fields_for :deployments do |builder| %>
我发现部署字段没有显示,所以我添加了
@report.deployments.build
到我的报告控制器的新方法!
我只需要弄清楚我是否需要对更新/编辑方法做任何事情?