如何在rails上的ruby中访问控制器中的param值?

时间:2012-11-28 11:04:33

标签: ruby ruby-on-rails-3.2

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

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'

请帮我解决问题?

3 个答案:

答案 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