resourceを使わないrouting
これまでは、基本的なCRUDをroutes
ファイルにresources :●●
と記述することで実現しました。しかし更に機能を追加する場合、resources
以外のルートを作成することが、開発の現場ではよくあります。ここでは、前章で作成した映画紹介のプロジェクトに並べ替え機能を追加する過程を通して、resources以外のroutingについて学びます。
moviesのindexページの完成イメージは、以下の通りです。
・各作品は、決められた順番通りに並んでいる。
・各作品の行の後ろに、矢印のマークが表示されており、これを押すとひとつ順番が上がる
・その順番は記録され、次にindexページを開くと新しい順番で作品が表示される
まずこれを実現するには、「順番」を管理する必要がありそうです。worksテーブルに順番を管理するための新しいカラム「position」を追加しましょう。
今回は、このような並べ替え機能を簡単に導入できるgem「acts_as_list」を使用します。公式ドキュメントを見ながら、gemを導入してください。
次に、indexページの矢印(↑)が押された場合の動きを考えましょう。今回は、acts_as_listを使ってworksのpositionの情報を変更します。
矢印がクリックされたとき、どのcontroller・actionを使うのが良いでしょうか。
ここではworks_controllerに「move_heigher」というactionを定義し、そのactionの中でposition情報の管理を行います。そのcontrollerおよびactionを呼び出すためには新しくルートを定義する必要があります。以下のようにroutesファイルを編集してください。routesを編集したら、コマンドでrails routes
を実行すると、routesファイルの記述により生成されているルートが確認できます。higher_work_path
は正しく生成されていますか?