2 flat logo on transparent 256
2018-03-07

Ruby On Railsでto_paramメソッドを利用し、ルートへ文字列を追加する

Wwwpic

Ruby On RailsでShowアクションやページのデフォルトURLは localhost:3000/articles/idなど、基本的にURLへidを引き渡します。

しかし、SEO的にはURLへ対象ページのキーワードが入っている方が良いので、今回Ruby On Railsのルーティングへ文字列を追加する方法を解説します。

ActiveRecordで使用するパラメーターを変更する

Showアクションなどで、値を検索する際のパラメーターを idからslugという項目へ変更します。

手順1:カラムをユニーク制限に設定する

重複するとエラーになるので、対象カラム(今回はslug)をユニーク制限として生成します。

class AddSlugsToArticles < ActiveRecord::Migration
  def change
    add_column :articles, :slug, :unique => true
  end
end

手順2:モデルへメソッドを追加

今回はArticleModelへメソッドを追加します

class Article < ActiveRecord::Base
  def to_param
    slug
  end
end

手順3:Controllerを変更

ShowアクションのControllerを変更します。

class ArticlesController < ApplicationController
  def show
    @article = Article.find_by(slug: params[:id])
  end
end

findbyはslugがnilの場合エラーになります。 findby!を利用すればエラーを回避できますが、 挙動的にはオススメしません。

登録時にslugを入力必須にするかDBでNill falseにするかの 対応が必要です。

また登録時にslugを設定する場合はストロングパラメーターも変更する必要があります。

※変更後は全てのURLがslugへ変更される為、 既に公開されているURLは、ミドルウエアの設定などで リダイレクトする必要があります。

Ruby On RailsでRedisを利用してランキング機能を実装する

Ruby On Rails4で簡易ブログを作成する1 | VIew Controller ルートを作成する

Ruby On Rails4で簡易ブログを作成する2 | editとcreateのアクションとページを作成する

Ruby On Rails4で簡易ブログを作成する3 | editページからデータをupdateさせる

前の記事
次の記事