Ruby on RailsでURLにid以外の任意の項目を指定したい
方法
URLを変更したいモデルのto_paramメソッドをオーバーライド
- to_paramメソッドをオーバーライド
$ vi app/models/chapter.rb class Chapter < ActiveRecord::Base ・ ・ ・ # 話数によるURLでのアクセスを可能とする def to_param # URLで指定する項目を指定 chapter end end
params[:id]で渡ってくる値が変わるのでそれに合わせてControllerを修正
- 今まではChapterを一意に指定するchapter_idが渡ってきていたが、話数が渡ってくるようになったので対応。
$ vi app/models/chapter.rb @chapter = Chapter.find(params[:id]) ↓ @chapter = Chapter.find_by_anime_id_and_chapter(params[:anime_id], params[:id])
- ちなみに、下記のようにwhereを使ってChapterを取得しようとするとChapterは取れるのにView生成時にChapterの項目が取得できずエラーとなった。なんでだろう?
$ vi app/models/chapter.rb @chapter = Chapter.where('anime_id', params[:anime_id]).where('chapter',params[:id])