4

Rails の新しい動的 attr_accessible 機能を使用したいと思います。ただし、各ユーザーには多くの役割があります (私は宣言型承認を使用しています)。したがって、モデルには次のものがあります。

class Student < ActiveRecord::Base

attr_accessible :first_name, :as=> :admin

end

そして、これをコントローラーに渡します:

@student.update_attributes(params[:student], :as => user_roles)

user_roles はシンボルの配列です:

   user_roles = [:admin, :employee]

配列内のシンボルの 1 つが宣言された attr_accessible と一致するかどうかをモデルで確認したいと考えています。したがって、重複は避けます。

たとえば、user_roles =[:admin, :employee] とします。これは機能します:

@student.update_attributes(params[:student], :as => user_roles.first)

しかし、すべてのユーザーが多くの役割を持っているため、1 つの役割またはシンボルしか検証できなければ意味がありません。

どんな助けでも大歓迎です

** * ** * ** * ** * ***更新* ** * ** * ** * ** * ** * ** * ** * **

ここからサンプル アプリをダウンロードできます: https://github.com/jalagrange/roles_test_app

このアプリには 2 つの例があります。そして、コントローラーの更新アクションで「user_roles.first」を使用しているため、名前のみを変更できる人。お役に立てれば。他の誰かがこの問題を抱えているに違いないと確信しています。

4

1 に答える 1

1

次のように、 ActiveModelの一括割り当てモジュールにモンキーパッチを適用できます。

# in config/initializers/mass_assignment_security.rb

module ActiveModel::MassAssignmentSecurity::ClassMethods

  def accessible_attributes(roles = :default)
    whitelist = ActiveModel::MassAssignmentSecurity::WhiteList.new
    Array.wrap(roles).inject(whitelist) do |allowed_attrs, role|
      allowed_attrs + accessible_attributes_configs[role].to_a
    end
  end

end

:asそうすれば、オプションとして配列を渡すことができますupdate_attributes

(を使用して)accessible_attrs_configsが含まれている場合、これはおそらく壊れることに注意してくださいBlackListattr_protected

于 2011-09-25T02:25:29.797 に答える