好吧,我可以想出两种方法让你做到这一点。
首先,在控制器中:
这假设您有一个方法
permitted_to?
它检查是否允许用户更改该属性
if params[:post]
params[:post].each_pair do |key, value|
@post.send("#{key.to_s}=", value) if @current_user.permitted_to?(:update_attribute, :post, key.to_sym)
end
@post.save
end
另一种方法可能不是最好的方法,因为您将更改类的属性,这意味着它将影响模型的所有实例。
不管怎样,假设您正在使用
attr_accessible
要限制属性:
在您的模型中,执行以下操作:
accessible_attributes = self.class.inheritable_attributes.delete(:attr_accessible)
之后再恢复可能是个好主意。
self.class.inheritable_attributes.delete(:attr_accessible) = accessible_attributes
这和
attr_protected
和
attr_readonly
第二部分。我假设每个用户类型都有一个数组,其属性可以更改。
例如:
self.class.inheritable_attributes[:attr_accessible] =
Set.new(@current_user.allowed_attributes(:post))
或
self.class.inheritable_attributes[:attr_protected] =
Set.new(@current_user.restricted_attributes(:post))
在哪里?
allowed_attributes
返回类似
['parent_id', 'published', 'title']