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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

960閲覧

商品に対してのレビューを投稿画面からidを保存したい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/09/05 01:51

rails初学者です。登録された商品に対してレビューを登録する機能を作っています。
商品詳細ページ(items#show)にレビュー新規投稿画面のリンクがあります。
レビュー新規登録の際にreviewsテーブルのitem_id(商品のid)に以下の様にデータを保存したいです。

Ruby

1<%= form_with(model: @review, local: true) do |f| %> 2 3 <%= f.hidden_field :item_id, { value: @item.id} %>

質問としましては、上記コードの@itemの取得方法が分かりません。
先ほどまでshowページで表示していたitemをどの様に取得すればいいでしょうか?
ご教示お願いします。

また調べた記事などを参考に以下の様に書いていましたが,
undefined method `id' for nil:NilClassとなりました。

Ruby

1@item = Item.find_by(id: params[:item_id])

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

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

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

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

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

winterboum

2020/09/05 11:19

この item は表示中のreviewとはどういう関係にありますか? このviewを呼び出しているcontrollerを載せてください
退会済みユーザー

退会済みユーザー

2020/09/07 11:30

回答ありがとうございます。 別回答で解決出来ました!!
guest

回答2

0

ベストアンサー

  • itemに対して複数のreviewが付く
  • itemreviewは親子の関連をもつ

という前提での話なのですが、routesは以下のようになるのが自然かとおもいました。

ruby:routes.rb

1resources :items do 2 resources :reviews 3end

上記のルーティングにした場合、new_item_review_path GET /items/:item_id/reviews/new(.:format)
が作られます(rails routesコマンドで確認できます)

items#showで「レビュー追加」のリンクは

= link_to 'レビュー追加', new_item_review_path(@item)

という風に書けます。

あとはreviews#newでレビュー入力フォームを表示する。のがよりRailsらしいかなとおもいました。

reviews#newのURLは/items/1/reviews/newとなるので、コントローラで@item = Item.find(params[:item=id])と書けば、レビューを追加するitemが取得できます。

投稿2020/09/07 09:10

HiroshiUeki

総合スコア50

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

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

0

ruby

1def show 2 @review = Review.new 3 @item = Item.find_by(id: params[:item_id]) 4end

のようにすればできるかと思います!

投稿2020/09/07 05:01

ducci

総合スコア191

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問