0

CanCan1.6を使用したRails3.1アプリがあります。でさまざまな属性を保護していますattr_protected ... :as => :api。を使用したいのですload_and_authorize_resourceが、保護されたフィールドを削除するためにも使用します。何か案は?

編集:これが私の現在の回避策です:

orders#newでは、をスキップしてload_resource承認しています。適切なスコープを使用して、新しい注文を直接初期化します。

@order = Order.new(params[:order], :as => :api)

次に、ユーザーを手動で設定します。

@order.user = current_user

確かに大したことではありませんが、他の場所で行っているように、CanCanをネイティブにロードして承認するよりもエレガントではありません。

4

1 に答える 1

0

一般に、送信する保護フィールドが数個しかない場合は、パラメータハッシュから値を引き出して、手動で割り当てる方が簡単です。

##save the parameter and delete it from the hash
role      = params[:employee][:role_id]
params[:employee].delete("role_id")

##create object and assign parameter manually
@employee = Employee.new(params[:employee])
@employee.role_id = role

多くの属性がある場合は、手動割り当てを自動化できます。

##list protected attributes and create new employee
attr = Employee.protected_attributes ##["id", "type", "name"]

@employee = Employee.new

##loop through params and manually send value
params[:employee].each do |p|
    @employee.send("#{p}=", params[:employee]["#{p}"])
end

2番目の部分を完全にテストする時間がありませんでしたが、それで正しい方向に進むはずです。

于 2012-07-30T21:12:52.157 に答える