11

Rails 3.1 APIのattr_accessibleについて読んだ後、そこにas:adminオプションがあることがわかりました。2つのことを知りたいです。

  1. ユーザーが管理者フラグを持っている場合、コントローラーはどのようにしてユーザーが管理者であることをモデルに通知しますか。

  2. ユーザーが所有者である場合、:as => ownerモデルで指定できますか。また、コントローラーがモデルにアイテムの所有者であることをどのように通知しますか。

4

3 に答える 3

18

モデルとの組み込みの統合はありません。assign_attributes呼び出しで役割を渡します。

@project.assign_attributes(params[:project], :as => :admin)

:asパラメータのデフォルトは:defaultで、任意のシンボルを渡すことができます。これをUserモデルに統合するには、 という属性を与えてから、次のroleようにします。

@project.assign_attributes(params[:project], :as => current_user.role.to_sym)

次を使用して保護をバイパスすることもできます:without_protection

@project.assign_attributes(params[:project], :without_protection => true)

同様に、newcreatecreate!update_attributes、およびupdate_attributes!メソッドはすべて一括代入セキュリティを尊重します。セキュリティに関するRuby on Rails ガイドに詳細情報があります。

于 2012-01-10T06:56:18.660 に答える
3

どちらのシナリオでも、最初に宣言したのと同じ方法で渡します。たとえば、次のようになります。

class User < ActiveRecord::Base
  attr_accessible :name
  attr_accessible :credit_card, :as => :admin
end

あなたがした場合

user = User.new(:name => "John", :credit_card => "1234123412341234")

次に、を割り当てることができなくなりますcredit_card

user.attributes # {:name => "John", :credit_card => nil} 

ただし、それが可能であると述べた場合:as => :admin、それは許可されます

user = User.new({:name => "John", :credit_card => "1234123412341234"}, :as => :admin)
user.attributes # {:name => "John", :credit_card => "1234123412341234"} 

詳しくは:

http://www.enlightsolutions.com/articles/whats-new-in-edge-scoped-mass-assignment-in-rails-3-1

于 2012-01-10T06:57:41.330 に答える
1

特定のユーザーとしてアクセスするすべての属性を適切に定義する必要があります。例えば:

    class User < ActiveRecord::Base
    attr_accessible :name
    attr_accessible :credit_card, :as => :admin
    end

これは私にとってエラーを示しました。しかし、私がそれを変更したとき

    class User < ActiveRecord::Base
    attr_accessible :name
    attr_accessible :name, :credit_card, :as => :admin
    end

これは私が使用したときにうまくいきました

    @user.update_attributes(params[:user], :as => :admin)
于 2014-09-12T00:43:49.417 に答える