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、変更されたパラメーターだけでなく、すべてのパラメーターで更新属性を呼び出します。スーパーで更新されるフィールドを除外するにはどうすればよいですか?

4

2 に答える 2

0

Rails 3 には strong_parameters gem を使用することをお勧めします。

検証をモデル レベルで実行する必要があるか、コントローラー レベルで実行する必要があるかについては、常にかなりの議論がありました。

強力なパラメーターを使用すると、コントローラー アクションで許可されたパラメーターを簡単に設定できます。

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

また、Rails 4 ではこれがデフォルトになります。

于 2013-02-21T11:31:57.957 に答える
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 に答える