use*_*974 257 ruby-on-rails ruby-on-rails-4
attr_accessible 似乎不再适用于我的模型.
在Rails 4中允许批量分配的方法是什么?
Pie*_*ois 444
Rails 4现在使用强参数.
现在,在控制器中完成保护属性.这是一个例子:
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
Run Code Online (Sandbox Code Playgroud)
无需再attr_accessible在模型中设置.
accepts_nested_attributes_for要使用accepts_nested_attribute_for强参数,您需要指定哪些嵌套属性应列入白名单.
class Person
has_many :pets
accepts_nested_attributes_for :pets
end
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
# ...
private
def person_params
params.require(:person).permit(:name, :age, pets_attributes: [:name, :category])
end
end
Run Code Online (Sandbox Code Playgroud)
关键字是不言自明的,但为了以防万一,您可以在Rails Action Controller指南中找到有关强参数的更多信息.
注意:如果您仍想使用attr_accessible,则需要添加protected_attributes到您的Gemfile.否则,你将面临一个RuntimeError.
edi*_*gat 22
如果你更喜欢attr_accessible,你也可以在Rails 4中使用它.你应该像gem一样安装它:
gem 'protected_attributes'
Run Code Online (Sandbox Code Playgroud)
之后,您可以在Rails 3中使用attr_accessible
此外,我认为这是最好的方法 - 使用表单对象来处理质量分配,并保存嵌套对象,你也可以使用protected_attributes gem
class NestedForm
include ActiveModel::MassAssignmentSecurity
attr_accessible :name,
:telephone, as: :create_params
def create_objects(params)
SomeModel.new(sanitized_params(params, :create_params))
end
end
Run Code Online (Sandbox Code Playgroud)
小智 6
Rails 5 的更新:
gem 'protected_attributes'
Run Code Online (Sandbox Code Playgroud)
似乎不再起作用了。但给:
宝石'protected_attributes_continued'
尝试一下。
| 归档时间: |
|
| 查看次数: |
142340 次 |
| 最近记录: |