-4

我的任务是访问参数值以创建新用户。我的创建控制器代码是

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'

请帮我解决问题?

4

3 回答 3

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
于 2012-11-28T11:49:44.010 回答
1

在 rails 3.2.3 默认情况下没有质量分配。你必须去你的模型并添加 attr_accessible :name, :position, :visible。基本上,您必须添加要批量分配的每个属性。

 class Student < ActiveRecord::Base
    attr_accessible :name, :position, :visible
 end
于 2012-11-28T11:39:45.787 回答
0

您的学生模型应该将可以批量分配的属性列入白名单,attr_accessible如下所示:

class Student < ActiveRecord::Base
  attr_accessible :name
end
于 2012-11-28T11:11:18.733 回答