0
0

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.

RubyでContentfulのEntryを取得する様々な方法

Posted at

はじめに

Contentfulの利用方法については、基本的に公式ドキュメントに全て載っています。
しかし、英語のドキュメントであることから、読み解くのに時間がかかってしまうため、
私が実務で利用したケースと合わせて、基本的なEntryの取得方法のみをまとめました。

前提

gem contentfulを利用しています。

初期化

インスタンス化にはspace IDaccess tokenが必須です。
また、インスタンス化の際に利用できるオプションはREADMEに全て記載されています。

require 'contentful'

client = Contentful::Client.new(
  space: '<SPACE>',
  access_token: '<ACCESS_TOKEN>'
)

エントリー

spaceのすべてのエントリを取得する

space内の全てのエントリを取得できるため、コンテントタイプの壁を超えます。
実務では利用してません。

entries = client.entries

単一のエントリを取得する

エントリIDを指定する方法です。ActiveRecordでいうfindです。

entry = client.entry('<entry_id>')

検索パラメータ

特定のコンテントタイプを指定してエントリを取得する

これを基本的に使用してデータを取得します。

entries_by_content_type = client.entries(content_type: '<content_type_id>')

取得するフィールドを選択する

これは不要なfieldsを含めたくない場合に利用しました。
例えば、作成日時の「年」の情報のみを取得したい場合です。

また、パラメータは複数組み合わせて利用可能です。

entries = client.entries(content_type: '<content_type_id>', select: 'fields.productName')

完全一致

ハッシュのキーはfields.nameなどもでき、完全一致を検索します。

entries = client.entries('sys.id' => '<value>')

完全不一致

ハッシュのキーの末尾に[ne]を付与します。

entries = client.entries('sys.id[ne]' => '<value>')

範囲

記事のデータを年毎で分け、取得する場合に使用しました。

  • [lt]: 未満。
  • [lte]: 以下。
  • [gt]:より大きい。
  • [gte]: 以上。
# Less than:
entries = client.entries('sys.createdAt[lt]' => '2013-08-28')

# Less than or equals:
entries = client.entries('sys.createdAt[le]' => '2013-08-28')

# Greater than:
entries = client.entries('sys.createdAt[gt]' => '2013-08-28')

# Greater than or equals:
entries = client.entries('sys.createdAt[ge]' => '2013-08-28')

並び替え

デフォルトでは、
公開タイムスタンプの降順 (sys.updatedAt) と
ID の昇順 (sys.id)に並べられます。

これは、
最近公開されたアイテムが一番上に近く表示され、
同じ公開タイムスタンプを持つアイテムの順序が、アイテムのID(sys.id)に基づくことを意味します。

作成日順:昇順

entries = client.entries(order: 'sys.createdAt')

作成日順:降順

フィールドの前に-記号を付けることで、並べ替え順序を逆にすることができます。

entries = client.entries(order: '-sys.createdAt')

複数指定

entries = client.entries(order: ['sys.createdAt', 'sys.id'])

まとめ

初めは「スペース」「コンテントタイプ」「エントリ」といった言葉が何を指すのかを明確にすると理解が進むと思います。
他にも様々なことができますので、公式ドキュメントをGoogle翻訳などを利用して、読んでみることをおすすめします。

参考文献

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?