モデルから公開するフィールドを指定するために を使用するattr_accessible
場合、スクリプト/コンソールにも当てはまりますか? attr_accessible
コンソールからもアクセスできないと指定しなかったものを意味しますか?
5 に答える
これは、大量割り当ての場合にのみ当てはまります。たとえば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
です。主にフォームなどからの変数の大量割り当てから保護するだけです。
コンソールは、Rails アプリケーションとまったく同じように動作します。特定のモデルの一部の属性を保護した場合、コンソールまたは Rails アプリ自体からこれらの属性を一括で割り当てることはできません。
その理由は次のとおりです。
、 、などnew(attributes)
、一括割り当てによって設定できるモデル属性のホワイト リストを指定します。これは attr_protected マクロの反対です:update_attributes(attributes)
attributes=(attributes)
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`.
つまり、大量割り当てを回避するだけですが、値を設定することはできます。
何かを指定するとattr_accessible
、それらのものだけがコンソールまたはウェブサイト インターフェイスからアクセスできます。
例: あなたが と を作ったname
とemail
しますattr_accessible
:
attr_accessible :name, :email
and を省略しましたcreated_at
(updated_at
これはあなたが想定している)。その後、コンソールでこれらのフィールドのみを編集/更新できます。
モデルからフィールドを公開したい場合は、使用できます
attr_accessor :meth # for getter and setters
attr_writer :meth # for setters
attr_reader :meth # for getters
または、属性に何らかの動作を追加する場合は、仮想属性を使用する必要があります
def meth=(args)
...
end
def meth
...
end
乾杯。