我有任何人无法访问的字段,因此我不能将这些字段添加到attr_accessible。但我也有活跃的管理员,应该有权访问这些字段。到目前为止,我尝试了下一步:
controller do
def update
org = Organization.find_by_id(params[:id])
org.subscription.plan_id = params[:organization][:subscription_attributes][:plan_id]
org.subscription.expires_at = params[:organization][:subscription_attributes][:expires_at]
org.save
super
end
end
但是super
仍然会在所有参数上调用更新属性,而不仅仅是已更改的参数。如何在超级中排除要更新的字段?
答案 0 :(得分:0)
我建议使用strong_parameters gem作为rails 3。
无论是否必须在模型或控制器级别运行验证,这一直是一个很大的错误。
通过使用强参数,您可以在控制器操作中轻松设置允许的参数:
params.permit(:name, {:emails => []}, :friends => [ :name, { :family => [ :name ], :hobbies => [] }])
同样在Rails 4中,这将成为默认值。
答案 1 :(得分:0)
根据活动管理员的来源,我在超级方法上调用了一个块,并在那里传递了所需的参数。 结果代码看起来像这样
def update
plan_id = params[:organization][:subscription_attributes].delete(:plan_id)
expires_at = params[:organization][:subscription_attributes].delete(:expires_at)
update! do
resource.subscription.plan_id = plan_id
resource.subscription.expires_at = expires_at
resource.subscription.save if resource.valid?
end
end