Rails 4.0.0中的ActiveModel禁止错误

我正在处理嵌套的属性表单。

这些是两个模型.. Employee.rb

class Employee  :employeeID, foreign_key: :employeeID accepts_nested_attributes_for :employee_info end 

EmployeeInfo.rb

 class EmployeeInfo < ActiveRecord::Base belongs_to :employee, primary_key: :employeeID, foreign_key: :employeeID validates_uniqueness_of :employeeID end 

我在_form.html.rb中有我的表单

   
×

prohibited this shop from being saved:

和控制器中的更新方法

 def update respond_to do |format| p "------------------------------" p employee_params if @employee.update(employee_params) format.html { redirect_to @employee, notice: 'Employee was successfully updated.' } format.json { head :no_content } else format.html { render action: 'edit' } format.json { render json: @employee.errors, status: :unprocessable_entity } end end end 

在控制台中输出p employee_params的位置

 {"employeeID"=>"103", "employee_name"=>"James Michule", "employee_info_attributes"=>{"hire_date"=>"1996-03-12 11:30:00 UTC", "term_date"=>"1996-03-12 11:30:00 UTC", "hourly_rate"=>"7.4", "address"=>"108 E. Jay", "phone_number1"=>"", "phone_number2"=>"", "zipcode"=>"65721", "state"=>"MO", "city"=>"Ozark", "id"=>"30"}} 

当我尝试更新时我得到一个错误..错误:

 ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError): app/controllers/employees_controller.rb:56:in `block in update' app/controllers/employees_controller.rb:53:in `update' 

怎么了。? 请帮忙

您的employees_controller

 private def employee_params params.require(:employee).permit(:term_date, :hire_date) end 

employee_params方法中添加term_datehire_date ,就像上面的代码一样。

希望它能解决这个问题。

PS并且在rails> = 4上创建应用程序之前,请阅读“Rails强参数”主题

Rails 4具有strong_parameters的function

所以你可以使用

 @employee.update_attributes(params[:employee], permit[:employee_attribute] 

或者你可以按照以下方式做

 @employee.update_attributes(params[:employee].permit(:employeeID))