前提・実現したいこと
前アクションで選択した内容を遷移先のアクションで反映させたいです
前提として、
advicediariesテーブル(ユーザーがトレーニング内容を入力するテーブル)
advicemenusテーブル(トレーニングメニュー一覧が格納されているテーブル)
useradvicesテーブル(ユーザー情報が格納されているテーブル)
があります。
①useradvicerテーブルの内容をもとにユーザーに対し適切なメニューを複数提案します(2枚のうちの上の画像)
②提案するメニューは条件分岐を用いてchoiceアクションにて反映されます(2枚のうちの上の画像)
③複数提案されたメニューから今日行いたいメニューを選択し、newアクションへ遷移させたい
④newアクションではその日行うトレーニングを入力するのだが、その入力画面の上部にchoiceアクションで選択したメニューを反映させたい(1枚め画像から2枚目画像)
今回困っているのは③④の箇所になります。
choiceアクションからnewアクションへ遷移させる際、link_toを使えばよいかとも思ったのですが、
選んだ情報を持っていくやり方がわからず困っております。
良いやり方やhowtoがありましたらご教示いただけますと幸いです。
↓choiceアクションで選択をさせnewアクションにて選択したメニューを反映させる(このとき選ばんだメニューのみを反映させる)
該当のソースコード
rails
1##advicediaries/choice.html.erb 2 3<h4>選択するメニューを押下してください</h4> 4<% if current_user.useradvice.purpose == "ダイエット" && current_user.useradvice.frequency == 1 %> 5 <h4>メニューA</h4> 6 <% @advicemenu_a.each do |advicemenu| %> 7 <%= advicemenu.menu %> 8 <%= advicemenu.minimam_reps %> 9 <%= advicemenu.max_reps %><br> 10 <% end %> 11<% elsif current_user.useradvice.purpose == "ダイエット" && current_user.useradvice.frequency == 2 %> 12 <h4>メニューA</h4> 13 <% @advicemenu_b.each do |advicemenu| %> 14 <%= advicemenu.menu %> 15 <%= advicemenu.minimam_reps %> 16 <%= advicemenu.max_reps %><br> 17 <% end %> 18 <h4>メニューB</h4> 19 <% @advicemenu_c.each do |advicemenu| %> 20 <%= advicemenu.menu %> 21 <%= advicemenu.minimam_reps %> 22 <%= advicemenu.max_reps %><br> 23 <% end %> 24<% elsif current_user.useradvice.purpose == "ダイエット" && current_user.useradvice.frequency == 3 %> 25 <h4>メニューA</h4> 26 <% @advicemenu_d.each do |advicemenu| %> 27 <%= advicemenu.menu %> 28 <%= advicemenu.minimam_reps %> 29 <%= advicemenu.max_reps %><br> 30 <% end %> 31 <h4>メニューB</h4> 32 <% @advicemenu_e.each do |advicemenu| %> 33 <%= advicemenu.menu %> 34 <%= advicemenu.minimam_reps %> 35 <%= advicemenu.max_reps %><br> 36 <% end %> 37 <h4>メニューC</h4> 38 <% @advicemenu_f.each do |advicemenu| %> 39 <%= advicemenu.menu %> 40 <%= advicemenu.minimam_reps %> 41 <%= advicemenu.max_reps %><br> 42 <% end %> 43<% end %>
rails
1##advicediaries_controller 2 3class AdvicediariesController < ApplicationController 4 5 def index 6 @advicediaries = params[:search].present? ? current_user.advicediaries.where('created_at LIKE(?)', "%#{params[:search]}%"): [] 7 @advicemenus = Advicemenu.all 8 end 9 10 def choice 11 @advicemenu_a = Advicemenu.where(group: "A") 12 @advicemenu_b = Advicemenu.where(group: "B") 13 @advicemenu_c = Advicemenu.where(group: "C") 14 @advicemenu_d = Advicemenu.where(group: "D") 15 @advicemenu_e = Advicemenu.where(group: "E") 16 @advicemenu_f = Advicemenu.where(group: "F") 17 end 18 19 def new 20 @advicediary = current_user.advicediaries.new 21 end 22 23 def create 24 @advicediary = current_user.advicediaries.create(weight: advicediary_params[:weight], reps: advicediary_params[:reps], advicemenu_id: advicediary_params[:advicemenu_id], user_id: current_user.id, useradvice_id: current_user.useradvice.id) 25 redirect_to action: 'index' 26 end 27 28 private 29 def advicediary_params 30 params.require(:advicediary).permit(:weight, :reps, :user_id, :menu, :advicemenu_id, :useradvice_id) 31 end 32 33end
##advicediary.rb class Advicediary < ApplicationRecord def self.search(search) if search where(['created_at LIKE ?', "%#{search}%"]) end end belongs_to :user validates :user_id, presence: true belongs_to :advicemenu belongs_to :useradvice validates :useradvice_id, presence: true end
##advicemenu.rb class Advicemenu < ApplicationRecord has_many :advicediaries end
補足情報(FW/ツールのバージョンなど)
Rails 5.2.4.2
説明がうまくできずで申し訳ございません。
もし伝わりにくいなどございましたら仰っていただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/22 05:34