質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

1回答

2941閲覧

Railsのルーティングを/:username/:id/にしたい

kenny_sayama

総合スコア1036

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

1グッド

0クリップ

投稿2015/07/03 10:12

Railsでブログのようなものを作っています。
現状として、ユーザー登録にgemのdeviseを使っている以外はあとは特に使っていません。

ユーザーが記事を書けるようなサイトを考えており、記事ページのURLに/username/id(記事の)が入る形にしたいと思っています。
usernameだけはなぜか/users/username/ではなく、/username/にできています。

route.rbのファイルの中身は以下です。

devise_for :users, controllers: { omniauth_callbacks: 'omniauth_callbacks' }
devise_scope :user do
get '/:username', controller: 'users', action: 'show'
get '/users/sign_out', controller: 'devise/sessions', action: 'destroy'
get 'users/auth/:provider/disconnect', controller: 'omniauth_disconnects', action: 'update'
end

post 'user_invitation_beta_release/new'
get 'static/welcome'
root to: 'root#index'

resources :items
resources :contents
resources :articles do
resources :contents, only: [:create, :destroy, :change_order] do
resources :items, only: [:create, :destroy]
end
end
end

resources :articles do 配下にget '/:id', controller: 'articles', action: 'show'
とやるとGET /articles/:article_id/:id(.:format) articles#show
と出てしまうので上手くいきません。

Webサービスとかで/hoge.com/username/記事id/
みたいな実装をした経験がある方はいますでしょうか?
いましたらご教授賜りたく思います

marigold_24👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

リソースベースのパスの生成はちょっと難しいかと思います。
なので、リソースフルでないパスを生成してあげるしかないでしょう。

lang

1get 'articles/:username/:id' to 'articles#show' 2

これで、ArticelesControllerのshowメソッドに、
params[:username]とparams[:id]が格納された状態でルーティングされるはずです。

試してはいませんが。

参考:Railsガイド

投稿2015/07/03 15:23

rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenny_sayama

2015/07/08 09:10

回答ありがとうございます! リソースベースのパスは難しいとなると、非リソースベースでやるしかないのでしょうか? どうしても``/:username/:id``で実現したいのですが...
rifuch

2015/07/08 09:33

私の知っている限りでは、無理そうです。 非リソースフルとリソースフルは混合できるはずなので、うまいこと設定してあげればOKだと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問