假设我有一个strong_parameters
的客户控制器,如下所示:
def update
@customer.update_attributes(customer_params)
end
private
def customer_params
params.require(:customer).permit(:name, :age)
end
现在我想从Customer
模型访问允许的参数(名称和年龄)。例如:
class Customer < ActiveRecord::Base
def self.some_method
allowed_parameters = customer_params
end
end
如何访问这些参数?如何从客户模型中获取allowed_parameters = customer_params
?
答案 0 :(得分:3)
你的问题很不寻常。允许的属性通常不属于模型。它们是控制器关注点,因此Rails删除了attr_accessible
以支持strong_parameters
。如果您需要保护属性,ActiveRecord有attr_read_only
。
如果您想要一个中心位置来保留它们,只需在模型中添加一个常量。
class Customer
ALLOWED_ATTRIBUTES = [:name, :role]
def allowed_attributes
ALLOWED_ATTRIBUTES
end
end
现在你可以从任何地方User.allowed_attributes
开始。
private
def customer_params
params.require(:customer).permit(*User.allowed_attributes)
end
但在我看来这是不可取的,因为允许的属性应该在某些上下文中设置,比如用户角色或访问级别等......