我有一个任务来访问创建新用户的参数值。我的控制器代码是
def newstudent
@student = Student.new(params)
puts "+++++++++++"
puts params.inspect
if @student.save
respond_to do |format|
format.html # new.html.erb
format.json { render :json => @jtable }
end
end
end
但通过这样做我终端有一些错误。它显示像这样
ActiveModel::MassAssignmentSecurity::Error (Can't mass-assign protected attributes: action, controller):
app/controllers/students_controller.rb:42:in `new'
app/controllers/students_controller.rb:42:in `newstudent'
请帮我解决问题?
答案 0 :(得分:5)
这是我添加新学生的控制器。通过获取该错误消息,您必须使用@student = Student.new(params.reject {|key,value| key =="controller" || key =="action"})
代码拒绝控制器和操作。
def newstudent
@student = Student.new(params.reject {|key,value| key =="controller" || key =="action"})
if @student.save
@jtable = {'Result' => 'OK','Record' => @student.attributes}
else
@jtable = {'Result' => 'ERROR','Message'=>'Empty'}
end
respond_to do |format|
format.html # new.html.erb
format.json { render :json => @jtable }
end
end
答案 1 :(得分:1)
在rails 3.2.3中,默认情况下没有质量分配。你必须去模型并添加attr_accessible:name,:position,:visible。基本上你必须添加你想要批量分配的每个属性。
class Student < ActiveRecord::Base
attr_accessible :name, :position, :visible
end
答案 2 :(得分:0)
您的学生模型应该使用attr_accessible
将可以批量分配的属性列入白名单,如下所示:
class Student < ActiveRecord::Base
attr_accessible :name
end