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

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

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

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Q&A

解決済

1回答

4630閲覧

【ネストしたルーティングのURLのIDについて】

退会済みユーザー

退会済みユーザー

総合スコア0

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

1グッド

1クリップ

投稿2020/04/02 06:55

お世話になります。
ネストしたルーティングについて質問をさせてください。

まずルーティングについて以下のように設定しています。
●routes.rb

resources :toppages, only: [:index, :show] resources :restaurants, only: [:index] do resources :likes, only: [:show, :new, :create, :destroy] member do get :followers get :reviewers end end get 'login', to: 'sessions#new' post 'login', to: 'sessions#create' delete 'logout', to: 'sessions#destroy' resources :users, only: [:index, :show, :new, :create, :edit, :update] do member do get :approvings get :reviewings end end resources :favorites, only: [:create, :destroy]

これから生成されるURLは以下の通りです。

Prefix Verb URI Pattern Controller#Action likes_index GET /likes/index(.:format) likes#index likes_create GET /likes/create(.:format) likes#create likes_destroy GET /likes/destroy(.:format) likes#destroy favorites_create GET /favorites/create(.:format) favorites#create favorites_destroy GET /favorites/destroy(.:format) favorites#destroy users_show GET /users/show(.:format) users#show users_new GET /users/new(.:format) users#new users_create GET /users/create(.:format) users#create users_edit GET /users/edit(.:format) users#edit users_update GET /users/update(.:format) users#update sessions_new GET /sessions/new(.:format) sessions#new sessions_create GET /sessions/create(.:format) sessions#create sessions_destroy GET /sessions/destroy(.:format) sessions#destroy restaurants_index GET /restaurants/index(.:format) restaurants#index toppages_index GET /toppages/index(.:format) toppages#index toppages_show GET /toppages/show(.:format) toppages#show root GET / toppages#index toppages GET /toppages(.:format) toppages#index toppage GET /toppages/:id(.:format) toppages#show restaurant_likes POST /restaurants/:restaurant_id/likes(.:format) likes#create new_restaurant_like GET /restaurants/:restaurant_id/likes/new(.:format) likes#new restaurant_like GET /restaurants/:restaurant_id/likes/:id(.:format) likes#show DELETE /restaurants/:restaurant_id/likes/:id(.:format) likes#destroy followers_restaurant GET /restaurants/:id/followers(.:format) restaurants#followers reviewers_restaurant GET /restaurants/:id/reviewers(.:format) restaurants#reviewers restaurants GET /restaurants(.:format) restaurants#index login GET /login(.:format) sessions#new POST /login(.:format) sessions#create logout DELETE /logout(.:format) sessions#destroy approvings_user GET /users/:id/approvings(.:format) users#approvings reviewings_user GET /users/:id/reviewings(.:format) users#reviewings users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update favorites POST /favorites(.:format) favorites#create favorite DELETE /favorites/:id(.:format) favorites#destroy

上の画像からlikes#showに遷移するURLは/restaurants/:restaurant_id/likes/:idであり、インスタンスを引数としてPrefix_pathを指定すると、URLには
:restaurant_id → RestaurantモデルのID
:id → LikeモデルのID

が代入されると思います。
そこでlikes#showを以下のようにコーディングしてLikeモデルから該当するインスタンスを取得しようと考えたのですが、うまくいきませんでした。
●likes#show

def show @like = Like.find(params[:id]) end

おかしいと思いパラメータを調べてみたら、理想的なパラメータは
:id → 5 (中間テーブルのID)
:restaurant_id → 332 (レストランのID)
:user_id → 3 (userのID)

なのですが実際のパラメータは以下のようになっていました。
:restaurant_id → 5 :id → 3

つまり**:idが:restaurant_idに、:user_idが:idになっています**。
なぜでしょうか?
実際にlikes#showを

def show @like = Like.find_by(id: params[:restaurant_id]) end

とするとうまくいってしまうのでそれが気持ち悪いです。

GO9👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

リンク部分をどのように記述してるのかわからないのですが、
このようにしてください。

ruby

1= link_to '詳細', restaurant_like_path(restaurant_id, like_id, user_id: user_id)

idは自動的に順番に評価されます。

/restaurants/:restaurant_id/likes/:id

投稿2020/04/02 07:43

s.k

総合スコア423

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

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

退会済みユーザー

退会済みユーザー

2020/04/02 08:27

まさにその通りにやったらできました。引数を二個設定するのですね。 感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問