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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

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

Q&A

解決済

1回答

1416閲覧

【Rails】前アクションで選択した情報を遷移先のアクションで反映させたい

yastinbieber

総合スコア49

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/20 04:51

前提・実現したいこと

前アクションで選択した内容を遷移先のアクションで反映させたいです

前提として、
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

説明がうまくできずで申し訳ございません。
もし伝わりにくいなどございましたら仰っていただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

choice.html.erb で「選択するメニューを押下してください」したときにどのactionに飛ぶようになってますか?
そのときどのメニューを選んだかは、どういうparamsで渡ってきますか?

そのactionで
paramsからメニューを得て @advicemenu に入れたとします。
そこで
@advicediary = current_user.advicediaries.new(ここに@advicemenuからの情報をセット)
して、
render action: :new
すればよいです

投稿2020/06/21 06:34

winterboum

総合スコア23284

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

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

yastinbieber

2020/06/22 05:34

ありがとうございます。 無事解決できました。 choice actionにて <%= link_to "メニューA", new_advicediary_path(group: "B") %> のような形でリンクを作成し、 new actionにて params[:group] @advicemenus = Advicemenu.where(group: params[:group]) を指定してあげることで解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問