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

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

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

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

3150閲覧

URLを変更する方法について

begenner

総合スコア79

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/02/04 16:37

編集2019/02/06 15:40

現在サンプルアプリを作成しています。

下記の記事を参考にconfig/routes.rbのルーティングを変更しようとしました。
Ruby on Rails - railsで複数のidをurlに入れる方法|teratail

一番近いものが上のサイトだったのですが、
私的には商品ページの詳細画面のURLを

hogehoge.net/メインカテゴリの名前/サブカテゴリの名前/商品名

のようにしたいのですがうまくいきません(m_ m)
わかる方がいらっしゃれば教えていただきますようよろしくお願いいたします(m
_m)

###動作環境
OS:mac
Ruby:2.3.8
Ruby on Rails: 4.2.11
MySQL: 5.6.42

エラー表示(2019-02-07追記)

書き換え方がわからないので編集していないためエラーは現在でていません。

###期待する動作(2019-02-07追記)

  • items#showアクションのurlがhogehoge.net/メインカテゴリの名前/サブカテゴリの名前/商品名 になるようにしたい

###試したこと

###補足情報

###現在の関係しそうなソースコード

ruby

1# db/schema.rb 2 3 #商品 4 create_table "items", force: :cascade do |t| 5 t.string "name", limit: 255 6 t.integer "genre_id", limit: 4 7 t.integer "subgenre_id", limit: 4 8 end 9 10 #メインカテゴリ 11 create_table "categorys", force: :cascade do |t| 12 t.string "name", limit: 255, null: false 13 end 14 15 #サブカテゴリ 16 create_table "subcategorys", force: :cascade do |t| 17 t.string "name", limit: 255, null: false 18 t.integer "category_id", limit: 4, null: false 19 end 20

ruby

1# config/routes.rb 2 3resources :categorys, do 4 resources :subcategorys, do 5 resources :items, only: [:show] 6 end 7end

リレーション

ruby

1#app/model/item.erb 2has_one :category 3has_one :subcategory 4 5#app/model/category.erb 6belongs_to :item 7has_many :subcategorys 8 9#app/model/subcategory.erb 10belongs_to :item 11belongs_to :category

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

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

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

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

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

CHERRY

2019/02/05 00:17

> うまくいきません とは、どのような状態でしょうか? エラーメッセージが出ているなら、エラーメッセージを記載してください。 エラーが出ていない場合は、「現在の動作を具体的」に記載して、「期待する動作」とどのように違うのかを書いていただけないでしょうか?
begenner

2019/02/06 15:42

大変遅くなり申し訳ありません。 指摘事項について追記させていただきました。 よろしくお願いいたします。
guest

回答1

0

ベストアンサー

ruby

1get '/:category_name/:subcategory_name/:item_name', to: 'items#show' 2

ただ、カテゴリ名や商品名が一意でないならお勧めできません。

投稿2019/02/05 00:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

begenner

2019/02/06 15:47

返信が遅くなり申し訳ありません。 現在ご指摘頂いた通りに追記してみました。 consoleで`bundle exec rake routes`コマンドを実行すると HTTP Verb Path Controller#Actionには表示されていますが Path / Uri には何も表示されていません。
begenner

2019/02/06 15:50

その1行上には category_path と出ていますが categoryモデルのGETメソッドで2つのpathが一緒になってしまいました(m_ _m)
退会済みユーザー

退会済みユーザー

2019/02/07 00:19

> consoleで`bundle exec rake routes`コマンドを実行すると > HTTP Verb Path Controller#Actionには表示されていますが Path / Uri には何も表示されていません。 よく意味がわかりませんが名前付きではないということでしょうか? 名前付きルートが欲しいのであれば :as で指定してやればよいです。 > その1行上には category_path と出ていますが categoryモデルのGETメソッドで2つのpathが一緒になってしまいました(m_ _m) pathが一緒っていうのがわかりませんがURL自体は違うはずです。 まず行いたいことの確認ですが、resourcesで自動生成されるURLが気に入らないから独自のものに変更したいということですよね? であれば該当URLが自動生成されないようにした上で独自のURLを生成することになります。 resourcesでも生成してその上独自のものも生成しているのであれば異なるURLから同一のアクションを行うようになってしまうのは当然のことです。
begenner

2019/02/07 08:26

>まず行いたいことの確認ですが、resourcesで自動生成されるURLが気に入らないから独自のものに変更したいということですよね? おっしゃっていただいている通りで、どうしても特定のURLにしたかったため質問させていただきました。 コメントしていただいたasオプションをつけることで名前付きのルートを作成できました。 ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問