LoginSignup
5
6

More than 5 years have passed since last update.

Railsのルーティングをカスタマイズして、主キー以外をactionに渡す方法

Last updated at Posted at 2015-01-03

ブログ転載

要求された事例

ユーザのモデルはUserだが、ユーザ詳細画面のURLを /users/<user.id>はいやだ! /people/<user.nickname>にしたい!! Viewでのリンクもlink_to を使いたい!!!

解決方法

pathメソッドでのパラメータの渡し方がキモだった。

route.rb

Rails.application.routes.draw do
  get '/people/:nickname' => 'users#show', as: :people
end

as: :peopleの指定で people_pathメソッドが作られるので、link_toに渡せる。

users_controller.rb

class UsersController < ApplicationController
  def show
    @user = User.find_by(:nickname => params[:nickname])
  end
end

hoge.html.erb

<%= link_to people_path(nickname: user.nickname) %>

これで解決。

実際と戸惑い

ビューで毎回 people_path(nickname: user.nickname) と書くにはD…
user.link_toのようにメソッドチェーンにしたいけど、モデルに書いてはいけないような気がしたので、helperメソッドにした。

users_helper.rb

module UsersHelper
  def people_link_to(user)
    people_path(nickname: user.nickname)
  end
end

こういった "データには関係ないのでモデルではないが、モデルにひもづいているhtml生成のメソッド"ってどこに書けばいいのか相変わらず謎。

5
6
2

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
5
6