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

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

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

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

Q&A

解決済

2回答

3094閲覧

別のコントローラのインスタンス変数をビューで参照するには?

pukotan

総合スコア11

Ruby on Rails

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

1グッド

3クリップ

投稿2017/12/07 02:49

brandコントローラ内のインスタンス変数@brandをreviewコントローラのビューで使用したいのですが、その方法がわかりません。
どなたかアドバイスお願いします!

brand_controller.rb

Ruby

1 def show 2 @brand = Brand.find(params[:id]) 3 @reviews = @brand.reviews.paginate(page: params[:page]) 4 end

view/brands/show.html.erb

Ruby

1 <% if logged_in? %> 2 <%= link_to "レビューを書く", new_review_path %> 3 <% end %>

reviews_controller.rb

Ruby

1 def new 2 @review = current_user.reviews.build if logged_in? 3 end

view/reviews/new.html.erb

Ruby

1<p class="brand name"> 2 ここにブランド名を表示させたい 3</p>

reviewモデル、brandモデルの関連付け
review.rb

Ruby

1 belongs_to :brand

brand.rb

Ruby

1 has_many :reviews, dependent: :delete_all

どうぞよろしくお願いします。

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

link_toでリンクを生成する際にパラメータを受け渡せばいいと思います。

ruby

1<%= link_to "レビューを書く", new_review_path(@brand.id) %>

そして、reviews_controller.rb

ruby

1def new 2  @brand = Brand.find_by(id: params[受け取ったid]) 3end

とかしてみてはいかがでしょうか?

投稿2017/12/07 03:55

kenny_sayama

総合スコア1036

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

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

pukotan

2017/12/07 04:36

回答ありがとうございます。 link_toでパラメータを受け渡すんですね!! view/brands/show.html.erb <%= link_to "レビューを書く", new_review_path(@brand.id) %> reviews_controller.rb def new @brand = Brand.find_by(id: params[:format]) end と書いたら、うまくいきました。 ありがとうございました!
guest

0

関連性を持たせているのであれば、reviewモデルにbrand_idのようなカラムがあるのではないでしょうか?
上記が出来ていれば以下のようにしてレコードを取得出来るかと思います

reviews_controller.rb

Ruby

1@brand = Brand.find_by(id: params[:brand_id])

投稿2017/12/07 03:00

kenny_sayama

総合スコア1036

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

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

pukotan

2017/12/07 03:46

回答ありがとうございます。 試してみたのですが、うまくいきませんでした。 view/reviews/new.html.erbページでparamsを見てみたところ、 <ActionController::Parameters {"controller"=>"reviews", "action"=>"new"} permitted: false> という結果で、パラメータにbrand_idがありませんでした。 レビューを作成すればbrand_idも同時に作成されると思うのですが、newページはレビューの投稿画面なので、このページにはレビューはまだ存在しないのです。 どうすればいいでしょうか。
kenny_sayama

2017/12/07 03:56

投稿から何をしたいのかが汲み取れないので、もう少し投稿内容を考えてから投稿した方がいいと思います。
pukotan

2017/12/07 04:00

わかりにくい投稿ですみません。 関係のない部分を載せないようにしてみたのですが、削りすぎなのですね。 次回質問するときに気をつけようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問