0

我有任何人都不能访问的字段,所以我不能只将这些字段添加到 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仍然在所有参数上调用更新属性,而不仅仅是更改的参数。如何排除要在 super 中更新的字段?

4

2 回答 2

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
于 2013-02-21T13:33:32.240 回答
0

我建议对 rails 3 使用 strong_parameters gem。

验证是否必须在模型或控制器级别运行一直是一个相当大的讨论。

通过使用强参数,您可以轻松地在控制器操作中设置允许的参数:

params.permit(:name, {:emails => []}, :friends => [ :name, { :family => [ :name ], :hobbies => [] }])

同样在 Rails 4 中,这将成为默认设置。

于 2013-02-21T11:31:57.957 回答