##解決したいこと・前提
初めの質問内容より少し進展があったので追記しました!
各キャラクターの技一覧ページ(moves#index)から技をクリックするとその技の詳細ページ(moves#show)に遷移するようにしたいのですが、showアクションの設定に手こずっております。どなたかご教授いただけますでしょうか。
ページ遷移の流れとしましては、
1 キャラクター選択画面(characters/index.html.erb)
↓
2 選択キャラクターの技一覧画面(moves/index.html.erb)
↓
3 選択技の詳細画面(moves/show.html.erb)
で、CharacterモデルとMoveモデルは一対多のアソシエーションを組んでおります。
##エラー内容
No route matches {:action=>"show", :character_id=>#<Move id: 1, moves_name: "レイジアーツ", command: "4WP", throw_tech: nil, hitbox: "上", damage: "55", effect: "", startup: "13F", block: "-9F", hit: "必殺技モーション", counter_hit: "必殺技モーション", character_id: 1>, :controller=>"moves"}, missing required keys: [:id]
error
1#vies/moves/index.html.erb 2 3<% @moves.each do |move| %> 4 <tr class="moves-info-contents"> 5 <td class="moves_name"><%=link_to move.moves_name, character_move_path(move), class: "name-link" %></td> 6 </tr> 7<% end %>
#参照コード
- ルーティング
routes
1Rails.application.routes.draw do 2 root "characters#index" 3 resources :characters do 4 resources :moves, only: [:index, :show] do 5 collection do 6 get 'search' 7 end 8 end 9 end 10end
- パス
character_moves GET /characters/:character_id/moves(.:format) moves#index character_move GET /characters/:character_id/moves/:id(.:format) moves#show
- モデル
Character
1class Character < ApplicationRecord 2 has_many :moves 3end
Move
1class Move < ApplicationRecord 2 belongs_to :character 3end
- コントローラー
Characters
1class CharactersController < ApplicationController 2 3 def index 4 @characters = Character.all 5 end 6 7end
Moves
1class MovesController < ApplicationController 2before_action :set_move, only: [:index, :show, :search] 3 4 def index 5 @moves = @character.moves 6 end 7 8 def show 9 @move = Move.find(params[:id]) ←ここの記述が不安です。 10 end 11 12 def search 13 @moves = Move.search(params[:keyword]) 14 end 15 16 private 17 18 def set_move 19 @character = Character.find(params[:character_id]) 20 end 21 22end
- ビュー
<% @moves.each do |move| %> <tr class="moves-info-contents"> <td class="moves_name"><%=link_to move.moves_name, character_move_path(move), class: "name-link" %></td> </tr> ↑パスの引数の記述方法が分かりません。 <% end %>
##試み
1.ビューでeach文を用いてインスタンス変数(@moves)をブロック変数(move)にしていたことをうっかり忘れていたことに気づき、「シメた」とドヤ顔でパス内の@moves.idをmove.idに修正して鼻歌を歌いながらアプリを更新したところ別の壁に鼻っ柱をおられました。
2.直接パスを打ち込んで確認した際に詳細ページに飛べたので、ルーティング、コントローラには問題なしかと。
やはりPrefixの記述方法に問題ありとみて、記述方法を改めて調べた後、link_toのパスをcharacter_move_path(move)に変更したところ、パラメーターに含まれるデータが増えました!
ですが、missing required keys: [:id]のエラーは解決せず。すごく惜しい気がするのですが、、、
どうかお助けください。
##最後に
この他、解決の際に必要なコード等がありましたら遠慮なくご指定いただきたく存じます。まだまだMVCの構造を追いきれていないことが原因かと感じていますので、解決した際にできる範囲で構いませんので解決までの思考や考え方もご一緒に教えていただければ幸いです。
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。