2009-11-24 7 views
10

attr_accessibleを使用して、モデルのどのフィールドを公開するかを指定すると、script/consoleも同様ですか?私はattr_accessibleがコンソールからもアクセスできないと指定しなかったことを意味しますか?attr_accessible in railsアクティブレコード

答えて

19

これは、質量割り当てにのみ該当します。たとえば、あなたがいた場合、あなたのモデルでattr_protected :protectedを設定します

>> Person.new(:protected => "test") 
=> #<Person protected: nil> 

逆に、あなたはすべてのあなたがattr_accessibleを使用してアクセスできるようにしたい属性を設定することができます。

ただし、以下はまだ動作します:

>> person = Person.new 
=> #<Person protected: nil> 
>> person.protected = "test" 
=> #<Person protected: "test"> 

これは、コントローラと同じ動作である、ビューなどattr_protected

など、主にフォームから、変数の質量割り当てに対する保護します
7

なぜ実測値:

は、new(attributes)update_attributes(attributes)、又はattributes=(attributes)ような質量割り当てを介して設定することができるモデル属性のホワイトリストを指定します。 これはattr_protectedマクロの反対です:

Mass-assignment will only set attributes in this list, to assign to the rest of 
attributes you can use direct writer methods. This is meant to protect sensitive 
attributes from being overwritten by malicious users tampering with URLs or forms. 
If you‘d rather start from an all-open default and restrict attributes as needed, 
have a look at `attr_protected`. 

だから、それだけで大量の割り当てを避けることを意味しますが、私はまだ値を設定することができます。

7

コンソールはRailsアプリケーションとまったく同じように動作します。特定のモデルの一部の属性を保護した場合、これらの属性をコンソールまたはRailsアプリケーション自体から一括して割り当てることはできません。

1

somethingsをattr_accessibleに指定すると、コンソールまたはWebサイトのインターフェイスでこれらのものにアクセスできます。

例:

attr_accessible :name, :email 

created_atupdated_atを残し(あなたがすることになっているもの):あなたがattr_accessibleするnameemailを作ったとします。 コンソールでこれらのフィールドの編集/更新のみが可能です。

0

あなたがフィールドを公開したいあなたのモデルを形成した場合、あなたは

attr_accessor :meth # for getter and setters 
attr_writer :meth # for setters 
attr_reader :meth # for getters 

か、あなたの属性にいくつかの動作を追加したい場合は、あなたが仮想属性

def meth=(args) 
... 
end 
def meth 
... 
end 

を使用する必要がありますでしょうを使用することができます乾杯。

関連する問題