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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

2回答

953閲覧

確認画面にsessionでデータを渡す方法を教えてください

KokiOya

総合スコア27

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2019/07/22 04:04

rials初心者です。今、Teacher登録確認画面を作っているのですが、確認画面へのデータの受け渡しをhidden_fieldで隠して行おうとすると、中間テーブルを使った値がうまくデータの受け渡しができないためsessionでデータの受け渡しを行おうと思ったのですが、いまいち方法がわかりません。現状は以下の通りです。

確認画面のconfirm.html.erbです

<%= form_for(@teacher) do |f| %> <div class="field"> <%= f.label :"指導場所" %> <%= f.hidden_field :place_ids %> <% @teacher.places.each do |place| %> <p><%= place.name %></p> <% end %> </div> <%= f.submit '投稿画面に戻る', name: 'back' %> <%= f.submit '投稿する' %> <% end %>

登録画面のnew.html.erbです

<%= form_for(@teacher, url: {action: 'confirm'} ) do |f| %> <div class ="field"> <%= f.label :"指導場所" %> <%= f.collection_check_boxes :place_ids, @place, :id, :name ,{include_hidden: false},{multiple: true} %> </div> <%= f.submit "確認画面へ" %> <% end %>

teacher.rbです

class Teacher < ApplicationRecord has_many :teachers_places, foreign_key: 'teacher_id', dependent: :destroy has_many :places, through: :teachers_places, dependent: :destroy validates :place_ids, presence: true end

teacher_controller.rbのconrilmアクションとcreateアクションです

def confirm @place = Place.all @teacher = Teacher.new(teacher_params) if @teacher.valid? render 'confirm' else render 'new' end end def create @teacher = Teacher.new(teacher_params) if params[:back] render 'new' elsif @teacher.save redirect_to teachers_url else render 'new' end end

ご回答のほどよろしくお願いします。

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

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

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

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

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

guest

回答2

0

自己解決

下のように書いたところ自分のしたいことができました。

def confirm session[:place_ids] = @teacher.place_ids if @teacher.valid? render 'confirm' else render 'new' end end def create @place = Place.all @teacher.place_ids = session[:place_ids] if params[:back] render 'new' elsif @teacher.save redirect_to teachers_url else render 'new' end end

ご回答していただいたかたや、考えてくださったかた、本当にありがとうございました。

投稿2019/08/08 14:27

KokiOya

総合スコア27

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

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

0

hidden_fieldにvalueが設定されていないのが原因だと思います

<%= f.hidden_field :place_ids, :value => @teacher.place_ids %>

投稿2019/07/22 05:30

bamboo-nova

総合スコア1408

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

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

KokiOya

2019/07/22 06:06

ご回答ありがとうございます!試してみましたが、hidden_fieldでは中間テーブルの値のデータを受け渡すことはできませんでした。他何か方法がありそうでしたら、ご回答よろしくお願いします。
bamboo-nova

2019/07/22 06:32

ここですが、中間テーブルにも対応させたいのであれば @teacher = Place.teachers.build(teacher_params) などとするべきではないでしょうか。こうしないとplace_idとの紐付けがされないと思います。
KokiOya

2019/07/22 08:47

それでしたら、newアクションで事前に @teacher.teachers_places.buildは行なっておりますので、place_idとteacherの紐付けは問題ないかと思われます。いろいろ調べてみたのですが、データを渡す方法としてhidden_fieldとsessionを使った方法があるみたいですが、sessionを使った方法を教えてもらえないでしょうか、見たサイトが全てアバウトで初心者の私には理解できないものが多かったので、どうぞよろしくおねがいします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問