お世話になります。
ネストしたルーティングについて質問をさせてください。
まずルーティングについて以下のように設定しています。
●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
とするとうまくいってしまうのでそれが気持ち悪いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/02 08:27