gpt4 book ai didi

ruby-on-rails-4 - attr_accessible 和 strong 参数的区别

转载 作者:行者123 更新时间:2023-12-04 02:45:31 25 4
gpt4 key购买 nike

我刚刚在 attr_accessor 上做了一些阅读, attr_accessible和几个不同位置的强参数:

Difference between attr_accessor and attr_accessible
How is attr_accessible used in Rails 4?
http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

我正在查看批量分配:

http://code.tutsplus.com/tutorials/mass-assignment-rails-and-you--net-31695

我无法理解 attr_accessible 之间的区别和强参数。我对我对上述主题的理解不是 100% 有信心,所以我可能会遗漏一些简单的东西,但我知道他们做了类似的工作。

但是,attr_accessible 和有什么区别?和强参数?它们只是同一事物的不同名称吗?为什么我们从一个移动到另一个?

任何信息表示赞赏。

最佳答案

attr_accessible 在 Rails 4 中已被弃用,取而代之的是强参数。

两者都是解决质量分配问题的不同方法,但强参数更灵活。

例如,您有一个 User具有属性的模型 email:stringis_admin:boolean .您希望允许用户通过表单而不是 is_admin 修改他们的电子邮件。 field 。

在 Rails 3 中,你应该这样做:

attr_accesible :email

使用这种方法,用户不可能修改 is_admin因为该属性受到保护。

强参数的好处之一是您可以在 Controller 中执行以下操作:
def user_params
if current_user.admin?
params.require(:user).permit(:email, :is_admin)
else
params.require(:user).permit(:email)
end
end

这样一个管理员用户就可以修改 is_admin而普通用户不会。

这只是一个示例,并不是向用户授予管理权限的最佳方式,但它非常具有说明性。

强参数的主要优点是它们在 Controller 中定义并且可以在运行时动态分配。 attr_accessible 是一种更加静态和单一的白名单属性方式。

另一方面, attr_accessor 是完全不同的东西,并且仍然可以在 Rails 4 中使用,例如,如果您需要模型中的一个属性,它不需要持久化或写入数据库,但您需要在表单中使用它。想一想:
attr_accessor :has_accepted_legal_terms
它是一种 Ruby 方法,可用于声明与数据库无关的模型属性、类或 PORO(普通旧 ruby​​ 对象)的属性。

关于ruby-on-rails-4 - attr_accessible 和 strong 参数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30784851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com