在Rails 4.0中,最初由attr_accessible定义的数据在哪里?

时间:2014-06-16 04:14:14

标签: ruby-on-rails ruby-on-rails-4

我正在关注One Month Rails屏幕演员教程。由于他们在视频中使用Rails 3,因此attr_accessible属性不再适用于rails 4.在视频中,他们为attr_accessible添加了名称参数

attr_accessible :email, :password, :password_confirmation, :name

在我尝试遵循本教程时,我完全忽略了这一行,因为我没有attr_accessible开始。神奇地,它完美地运作。这是如何工作的,或者它是否仅在表面上起作用,但如果我继续该项目则不是真的吗?

在其他人问的question中,答案是attr_accessible现在重新定义为强参数,现在一切都在控制器中。但我也没有弄乱任何控制器(事实上,自从我启动项目以来,我没有生成新的控制器)。我应该担心还是铁轨魔术的一部分?

1 个答案:

答案 0 :(得分:2)

质量分配

{4}}方法取代了Rails 4中的attr_accessible - 这基本上是一种阻止models使用strong parameters的方法。

Mass Assignment是恶意用户一次设置多个不同的参数设置(超出您想要的设置)。引入strong params只允许某些数据填充您的模型,从而阻止了mass assignment问题

使用Rails 4,您可以从模型中读取您想要的任何数据,但是当您填充新对象时,您将只能提交已被列入白名单的数据。 strong_params方法,如下所示:

#app/controllers/your_controller.rb
class YourController < ApplicationController
   def create
      @model = Model.new(model_params)
   end

   private
   def model_params
       params.require(:model).permit(:your, :attributes)
   end
end

因此,您可以在不使用attr_accessible的情况下使应用程序正常运行的原因是因为您可以从数据库中提取数据而无需将任何参数列入白名单。当您尝试创建数据时,您会遇到问题,这是strong params进来的地方