8

属性を含むユーザーモデルを持つRailsアプリがありadminます。を使用してロックダウンされattr_accessibleます。私のモデルは次のようになります。

attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation, :admin, :as => :admin

そして、ユーザーコントローラーの更新メソッドは次のようになります。

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user], :as => current_user_role.to_sym)
    flash[:notice] = "Profile updated"
    redirect_to edit_user_url(@user)
  else
    render 'edit'
  end
end

アプリケーションコントローラーに、役割を文字列として返すヘルパーメソッドがあります。

def current_user_role
  @current_user_role ||= current_user.admin? ? "admin" : "default"
end
helper_method :current_user_role

私も設定config.active_record.whitelist_attributes = trueしましたconfig/application.rb

current_user_roleメソッドが現在のユーザーの管理者ステータスに基づいて適切な値を返していることを確認しました。Railsは一括割り当てエラーをスローしていません。しかし、管理者としてログインしているときにユーザーの管理者ステータスを更新しようとすると、Railsは更新を実行し、admin属性を黙って無視します。Railsコンソールでユーザーのレコードをプルアップすると、レコードが変更されていないことがわかります。

私は、RubyまたはRails固有の問題が発生していることに気づいていません。役割を動的にするための情報が見つかりません。私が見つけた最高のものはこれでした。

4

2 に答える 2

3

私のモデルには、これを機能させるための以前の試みから残された誤ったattr_accessor:adminがありました。見落としました。それを削除すると修正されました。

つまり、結果として、これはRails3.2で動的な役割を機能させるための非常に簡単な方法です。

于 2012-07-23T16:58:36.480 に答える
0

Rails3.2のバグのようです

https://github.com/stffn/declarative_authorization/issues/127

于 2012-03-15T19:53:53.557 に答える