ruby-on-rails – Rails attr_accessible:object vs:object_id

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails attr_accessible:object vs:object_id前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
用户has_one帐户.在用户模型上设置attr_accessible最好是保护:account,:account_id或者两者兼容?
attr_accessible :account

要么

attr_accessible :account_id

要么

attr_accessible :account,:account_id

我觉得两者都是要走的路(因为它更安全),尽管它感觉较少干.

更新给予更多的背景

只是为了给我更多的背景,为什么我问.我像大多数ppl一样,看到Github发生了什么事情,所以我们正在通过我们的应用程序,把它锁定得更紧.

在这样做的过程中,我发现我们通过的测试

User.create account:account

我们在account_id中传递的地方:

User.create account_id:account.id

我的选择是将它们全部改为一致,或者改变attr_accessible以允许任一.我决定把它们全部变成一致的.但是这让我担心我们可能在我们的应用程序中使用这两种方法,我可能只允许一个或另一个打破我们的应用程序.

当我说使用两者更安全的时候,我做了misspeak.这是一个漫长的一天.

@H_404_31@解决方法
这个没有正确的答案,尽管它取决于你打算如何更新这个用户. attr_accessible:帐户将允许您直接像这样大量分配帐户:
user.update_attributes(:account => account)

如果您已经拥有要与用户关联的帐户对象以及许多其他属性,则此功能很有用.另一方面,attr_accessible:如果您从一个下拉菜单或其他一些表单元素分配帐户的ID,则account_id将更为合适:

user.update_attributes(params[:user]) # params[:user][:account_id] is a part of this hash

后一种情况通常被认为更危险,并且是Github最近的安全问题的一部分问题:您可以发布任何您喜欢的account_id,包括不属于您的帐户,并且您的用户将被分配给它.

所以总体而言,我会去前者,并查找一下,以确保帐户是一个你期望的,但正如我刚才所说,你可以采取任何一种方式,这取决于你打算如何使用它.

猜你在找的Ruby相关文章