質問
ルーティングでネストした子要素を、idで取得することができるのでしょうか?
今していること
現在、オリジナルアプリを開発をrailsを用いて行っています。
編集と削除機能を実装しようとしています。
ルーティングにネストを行い、ネストした子要素のidを取得したいのですが、取得することができません。
ルーティングは以下のようにしています。
Ruby
1 resources :rooms, only: [:new, :create, :destroy] do 2 resources :memos, except: :new 3 end
実現したいこと
ルームを生成したら、そのルームに複数メモを追加できるようにしています。
メモの機能は入力蘭に文字を入力して、送信ボタンで保存するようにしているため直接編集をすることができません。
そのために、メモ毎に編集できるようにしたいと思いました。
私のイメージしているURLは
http://localhost:3000/rooms/11/memos/1/edit
ルーム13にあるメモ1番を修正するといった具合にしたいです。
しかし自分なりに、試してはみたのですが、memoのidを取得することができません。
veiw
Ruby
1<div class="memo-contents"> 2 <div class="memo-area"> 3 <% @memos.each do |memo| %> 4 <div class="box25"> 5 <p><%= memo.content %></p> 6 7 <%= link_to '編集', edit_room_memo_path(@room, @memo), class: "edit-btn" %> 8 <%= link_to '削除', "/rooms/#{@room.id}/memos/#{@memo.id}", method: :delete, class: "delete-btn", data: { confirm: '削除しますか?' } %> 9 </div> 10 <% end %> 11 </div> 12</div> 13
controller
Ruby
1class MemosController < ApplicationController 2 3 def index 4 @rooms = Room.all 5 @memo = Memo.all 6 @events = Event.all 7 @memo = Memo.new 8 @event = Event.new 9 @room = Room.find(params[:room_id]) 10 @memos = @room.memos.includes(:user) 11 end 12 13 def create 14 @room = Room.find(params[:room_id]) 15 @memo = @room.memos.new(memo_params) 16 if @memo.save 17 redirect_to room_memos_path(@room) 18 else 19 render :index 20 end 21 end 22 23 def edit 24 @memo = Room.find(params[:id]) 25 end 26 27 def update 28 end 29 30 def destroy 31 end 32 33 private 34 def memo_params 35 params.require(:memo).permit(:content).merge(user_id: current_user.id) 36 end 37end
routes
Ruby
1 room_memos GET /rooms/:room_id/memos(.:format) memos#index 2 POST /rooms/:room_id/memos(.:format) memos#create 3 edit_room_memo GET /rooms/:room_id/memos/:id/edit(.:format) memos#edit 4 room_memo GET /rooms/:room_id/memos/:id(.:format) memos#show 5 PATCH /rooms/:room_id/memos/:id(.:format) memos#update 6 PUT /rooms/:room_id/memos/:id(.:format) memos#update 7 DELETE /rooms/:room_id/memos/:id(.:format) memos#destroy 8 rooms POST /rooms(.:format) rooms#create 9 new_room GET /rooms/new(.:format) rooms#new 10 room DELETE /rooms/:id(.:format) rooms#destroy
これは仕方が無いことなのでしょうか?
アドバイスお願いします!
回答1件
あなたの回答
tips
プレビュー