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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 5

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

Ruby

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1122閲覧

親子関係のレコードに対する確認画面の書き方

kvnqfj

総合スコア17

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 5

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

Ruby

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/12/28 09:12

前提・実現したいこと

RoRでデートプラン投稿アプリを開発しています。
親子関係のあるレコードのフォームを作成しました。
上記のレコードに対して「フォームに入力=>確認画面=>登録」という処理を実装しようとしています。

レコード情報
親:dating(デートプラン情報を保持するテーブル)
子:spot(デートプランに含まれる各スポットの情報を保持するテーブル)

発生している問題

「フォームに入力=>登録」という通常の処理は実装出来ましたが、
確認画面を挟んだ場合の実装方法が分かりません。
ググって見ましたがなかなか参考になるページが見つからず質問させていただきました。

該当のソースコード

一部省略しています。

<%= form_for @dating do |f| %> <div class="row"> <h2 class="col-12 mb-1 pl-0"> <%= @dating.dating_theme %> <%= f.hidden_field :dating_theme %> </h2> </div> <p class="col-12 mb-0"> <i class="fa fa-map-marker icon date-detail-explain"></i><span><%= Prefecture.find(@dating.prefecture_code).prefecture_name %></span> <%= f.hidden_field :prefecture_code %> </p> <p class="col-12 mb-0"> <i class="far fa-eye icon date-detail-explain"></i><span>26</span><span>views</span> </p> <p class="col-12 mb-0"> <i class="fas fa-search icon date-detail-explain"></i><span><%= @dating.tag %></span> <%= f.hidden_field :tag %> </p> <p class="col-12 mb-0"> <i class="fas fa-yen-sign icon date-detail-explain"></i><span><%= @dating.cost %></span> <%= f.hidden_field :cost %> </p> <p class="col-12 mb-0"> <i class="icon ion-android-time icon date-detail-explain"></i><span><%= @dating.time %></span> <%= f.hidden_field :time %> </p> ####ここのfields_forの中の書き方が分からないです、、、一旦下記のように書いています。 <%= f.fields_for @dating.spots, html: { multipart: true } do |sp| %> <div> <p class="w-100"> <span class="mr-2"> <%= @spot.time %> <%= sp.hidden_field :time %> </span> <%= @spot.spot_name %> <%= sp.hidden_field :spot_name %> </p> <img src=<%= @spot.spot_pic %> class="date-detail-pic"> <%= sp.hidden_field :spot_pic %> <a href="#" target="_blank"> <%= @spot.url %> <%= sp.hidden_field :url %> </a> <p> <%= @spot.comment %> <%= sp.hidden_field :comment %> </p> </div> <% end %> <div class="float-right"> <%= f.submit 'Back!', name: 'back' %> <%= f.submit '投稿する' %> </div> <% end %>

エラーメッセージ

undefined method `time' for nil:NilClass

<%= @spot.time %>の@spotがないのが原因なのはわかっていますが、実装方法が分かりません。

参考にしたページ

親子レコードのフォーム実装は以下のページを参考にさせていただきました。
https://qiita.com/shizuma/items/5bfcf6c1e855b959e135

確認画面の実装は以下のページを参考にさせていただきました。
https://remonote.jp/rails-confirm-form

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

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

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

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

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

guest

回答1

0

ベストアンサー

@spotに相当するものはsp.objectで参照できます。

追記:

f.fields_for (f経由で呼ぶもの) の第1引数は、associationの名前です。
ゆえに、f.fields_for :spots do |sp|と書くのが正しいです。
参考に挙げていらっしゃるリンクでも、f.fields_forにはシンボルを渡しています。

投稿2019/01/09 05:43

編集2019/01/13 11:11
takumiabe

総合スコア661

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

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

kvnqfj

2019/01/09 13:49

回答ありがとうございます。 そうしますと、上記の<%= @spot.time %>と書いているところは <%= sp.object.time %>になるという認識で合っていますか?
takumiabe

2019/01/10 01:35

@kvnqfj 言葉足らずですみません。その認識であっていると思います。
kvnqfj

2019/01/12 05:46

返信遅くなりすいません。 以下のように修正しましたが、 「 <%= sp.object.time %>」のところで、 「undefined method `time' for #<Spot::ActiveRecord_Associations_CollectionProxy:0x007f71644894f0>」 というメッセージがでます。。。 sp.objectから直接レコードのカラムにアクセスできないということでしょうか? <%= f.fields_for @dating.spots, html: { multipart: true } do |sp| %> <div> <p class="w-100"> <span class="mr-2"> <%= sp.object.time %> <%= spot.hidden_field :time %> </span> <%= sp.object.spot_name %> <%= spot.hidden_field :spot_name %> </p> <img src=<%= sp.object.spot_pic %> class="date-detail-pic"> <%= sp.hidden_field :spot_pic %> <a href="#" target="_blank"> <%= sp.object.url %> <%= spot.hidden_field :url %> </a> <p> <%= sp.object.comment %> <%= spot.hidden_field :comment %> </p> </div> <% end %>
takumiabe

2019/01/13 11:12

追記しました。
kvnqfj

2019/01/14 06:02

確認画面を表示することができました! コメントいただき、ありがとうございました!! ただ、その先のDB登録がうまくいかないので、もう少し、調査してみたいとおもいます。。。 分からなかった際にはもう一度質問させたいただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問