##attributes とは
attribute
とは、オブジェクトが抱えるデータのことで、属性(attribute)
と呼ぶことがある。
例えば「human」というクラスがあったとしたら、「name」や「job」などの「属性(attribute)」を追加して使用することができる。
インスタンスメソッドattributes
で「属性名 => 値」のハッシュが取り出せる。
form.attributes
#=> {"title"=>"Foo", "body"=>"bar", "draft"=>false, "published_at"=>2019-12-15 15:40:00 +0900, "tags"=>["Ruby", "Rails"]}
インスタンスメソッドまたはクラスメソッドのattribute_names
で属性一覧が取り出せる(Rails 6で追加)
form.attribute_names
#=> ["title", "body", "draft", "published_at", "tags"]
##attributes の登録・更新メソッド
###・ attributes=
特定のattribute
を変更する。
オブジェクトの変更をしただけで、DBには保存されていない。
DBに保存する場合はsave
を実行する必要がある。
###・ assign_attributes
特定のattribute
を変更するためのメソッド。
attributes=
と同じくDBには保存されない。
DBに保存する場合はsave
を実行する必要がある。
###・ update_attibutes
複数のattribute
をまとめて変更してDBに保存する。
###・ attr_accessor
attr_accessor
は、型に縛られず値を入れることができる。
型に縛られず値を入れることができる、とは?
Railsから入った人へ【attr_accessor】って?の記事が理解しやすかったのでここからの引用。
例えば、name,descriptionという属性を持つUserオブジェクトを定義しようとすると
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :description
t.timestamps null: false
end
end
end
Railsでは上記の様な migration ファイルを作成するが
DBを扱わない純粋なRubyのコードでは下記のように記入ができる。つまり、型に縛られず値を入れることができる。
class User
attr_accessor :name, :description
end
##参考記事
Rubyでattributeを使う方法を現役エンジニアが解説【初心者向け】
Railsから入った人へ【attr_accessor】って?
Active Recordのattributesの更新メソッド
update_attibutesとassign_attributes違い
ActiveModel::Attributesを使う