Ruby中的强参数

时间:2014-02-05 23:17:18

标签: ruby-on-rails ruby strong-parameters

我收到有关强参数的错误消息。我认为只是rails 4不再使用属性了。我的toy.rb的代码是:

class Toy < ActiveRecord::Base 
  attr_accessible :name, :price, :vendor 
  validates :name, :presence => true 
  validates :price, :presence => true 
  validates :price, :numericality => true 
  validates :vendor, :presence => true 
end 

如何将其更改为强参数?

编辑:我使用了不同的rb我将其更改为员工,这就是我所拥有的:

  class Employee < ActiveRecord::Base
params.require(:employee).permit(:first, :last, :salary, :salary, :ssn)
validates  :first, :presence => true
validates  :last, :presence => true
validates  :salary, :presence => true
validates  :salary, :numericality => true
validates  :ssn, :presence => true 

它还在告诉我“ndefined局部变量或方法`params'代表#”

2 个答案:

答案 0 :(得分:2)

您需要的代码是

params.require(:toy).permit(:name, :price, :vendor)

您将把它放在控制器中。通常,您创建一个私有方法:

def create
  Toy.create(toy_params)
end

private
def toy_params
  params.require(:toy).permit(:name, :price, :vendor)
end

有关详细信息,请参阅http://guides.rubyonrails.org/getting_started.html#saving-data-in-the-controller

修改 我想我可能用我原来的答案误导了你。代码在控制器中,而不是模型。

答案 1 :(得分:0)

强力参数旨在帮助您的控制器将特定数据发送到您的模型。它旨在保护您的应用程序免受未经授权的数据传递:

#app/controllers/toys_controller.rb
Class ToysController < ActiveRecord::Base
    def new
        @toy = Toy.new #-> creates a blank AR object
    end

    def create
        @toy = Toy.new(toys_params) #->creates new AR object (populating with strong params)
        @toy.save
    end 

    private
    def toys_params
        params.require(:toys).permit(:your, :params, :here)
    end 
end