20
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

attributesとは?attributes の登録・更新メソッドあり

Posted at

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

20
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?