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を使う