0

我想为自己有一个更系统的解决方案,以避免批量分配。

一个典型的情况是从 params 中删除 id 或 user_id(通过表单自动提交)并在内部用 current_user.id 替换它(在 MyController#create 中)。

我能想到的一个解决方案是从 params 哈希创建对象,然后 update_attributes (父对象和子对象)用内部值替换敏感属性:

@user = User.create(:params[:user])
@user.update_attributes(:id => current_user.id)
@user.profile.update_attributes(:user_id => current_user.id)
@user.preference.update_attributes(:user_id => current_user.id)

有没有更短/更干的方式来表达这个?

如果偏好、配置文件等是用户的子对象(通过构建方法创建),我如何编写一个方法来为用户查找他们的外键并自动将它们替换为我传递给父级的值?

谢谢你。

4

2 回答 2

1

这就是attr_protectedattr_accessible文档)的用途。attr_protected会给你黑名单保护,同时attr_accessible会保护使用白名单。

虽然在批量分配后立即调用update_attributes会起作用,但最好使用保护批量分配的内置方法,因为每次对模型进行批量分配时都不需要重复代码。

于 2012-01-09T16:16:19.800 回答
1

我在早期的项目中使用以下方法完成了此操作:

@user = User.create(params[:user]) do |user|
    user.id = current_user.id
end

这对你有用吗?

另一种方法是查看文档并搜索:as基于角色的属性。

于 2012-01-09T20:48:45.233 回答