Railsでseed-fuをつかってデータを管理し、order_as_specifiedで指定順にデータを取得する

タグeachで並べる

Railsにはデフォルトで初期データを入れる仕組みとして rake db:seed がありますが、これは実行する度に同じデータが作成されてしまいます。そこで、代わりにseed-fuを利用するとデータの追加、管理が簡単にできるようになります!
あわせて、RailsのActiveRecordを使って、IDで検索した際に順番どおりにデータを引っ張ってきたいって時、方法はいろいろあるでしょうが、本記事ではorder_as_specifiedを利用して簡単に実現します。
ちなみ本記事の続編では作ったそれぞれのタグをユーザーに持たせて、合計数を出しています。

Seed Fu
https://github.com/mbleigh/seed-fu
OrderAsSpecified
https://github.com/panorama-ed/order_as_specified

バージョンはこちらです

準備

Gemfile

$ bundle install を実行

本記事ではTagモデルを作成いたします

db/migrate/20180725033227_create_tags

$ rails db:migrate を実行

seedデータの作成

まずはseed ファイルを置くディレクトリを作成します。
db/fixtures に作成した seed ファイルを置くか、db/fixtures/development、 db/fixtures/production のように環境ごとにファイルを作成することもできます。
本記事ではdb/fixturesに seed ファイルを置いています。

注意点としてはseed-fuでもデータを作成する際にidを指定してあげないと重複してしまいます。

db/fixtures/tag.rb

これでデータができました。

seedデータの更新

だけど後になって JavaScriptをJavaに変えたいし、PHPを追加したい、ついでに頭文字は大文字にしたいって、そういう時は再度seedファイル書き換えて、$rails db:seed_fuを実行します。

views

できたデータをeachで取り出します。
タグっぽいスタイルをつけて表示しています。

ruby,html,css,java,pyhton,php

order_as_specified で順番を指定してデータを取得

うーん、並び順を変えたくなった、rubyは4番目にしたいがどうしよう
という時に役に立つのが、gem ‘order_as_specified’です。
使い方はシンプルで、使いたいモデルに次のコードを入れる。

app/models/tag.rb

eachで取得するときにidで順番を指定してやります。

これでできました!以上です!
最後まで見ていただき、ありがとうございました!

本記事の続編として「Railsのhas_and_belongs_to_manyで、ユーザーが複数のタグを持てるようにし、その合計数を表示する」もあります!https://remonote.jp/rails_has_and_belongs_to_many


投稿者:

Shuji Tenra

「仕事に特化したQ&AサイトJobQuery【ジョブクエリ】」の開発/運営をしています。https://jobquery.jp