Rails

【Rails】DBに保存済みかどうかをチェックするpersisted?メソッドについて簡単に解説するよ

Rails

 

今回はデータベースに保存済みかどうかをチェックする「persisted?メソッド」について簡単に解説したいと思います。Railsドキュメントにも説明があまり書かれていませんが、よく使われるメソッドなのでしっかり理解していきましょう。

persisted?メソッドとは

persisted?メソッドは、ActiveRecord::Baseを継承しているインスタンスが利用可能なメソッドです。インスタンスがデータベースに保存されていればtrue、保存されていなければfalseを返します。

first_or_initializeメソッドと合わせてよく使います。

記述方法は以下の通りです。

モデル.persisted?()

#=> DBに保存されていればtrue
#=> 保存されていなければfalse

 

具体的に記述してみると以下のようになります。

↓ trueの例

class Person
  include ActiveModel::Model
  attr_accessor :id, :name
end

person = Person.new(id: 1, name: 'bob')
person.save
person.persisted? # => true

 

↓ falseの例

class Person
  include ActiveModel::Model
  attr_accessor :id, :name
end

person = Person.new(id: 1, name: 'bob')
person.persisted? # => false

persisted?メソッドの使用例

persisted?メソッドはtrueもしくはfalseで返すので、条件分岐と併用して使うことが可能です。下記のコードの場合、@productがデータベースに保存されていると、画像投稿ボタンと削除ボタンがビュー上に現れるようになります。

↓条件分岐を用いた例

<% if @product.persisted? %>
  <div data-index="<%= @product.images.count %>" class="js-file_group">
    <%= file_field_tag :src, name: "product[images_attributes][#{@product.images.count}][src]", class: 'js-file' %>
    <div class="js-remove">削除</div>
  </div>
<% end %>

まとめ

  • persisted?メソッドはDBに保存されているかどうかをチェックするメソッド
  • ActiveRecord::Baseを継承しているインスタンスが利用可能
  • 返り値はtrueもしくはfalse

 

 

今回はデータベースに保存済みかどうかをチェックする「persisted?メソッド」について簡単に解説しました。今回は説明があまり書かれていませんが、Railsドキュメントには大体のメソッドの説明が書かれているので、目を通す癖をつけておくといいと思います。