🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 5

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

Q&A

解決済

1回答

341閲覧

Rails POST処理を行う際にモデルを渡す

lyzmfeqpxs54

総合スコア237

Ruby on Rails 5

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

0グッド

1クリップ

投稿2019/11/21 03:20

いつもお世話になっております。
現在RailsでWebページを作成しております。

現在以下のようにコーディングしており、とあるページをrenderする前に@postsにテーブルからwhereで条件を絞ったデータを入れ、show.html.erbで使用しています。

そのページでとあるボタンを押した際にPOST処理を行い、xxxxメソッドが呼ばれるのですが、その中でテーブルにsaveを行うときにバリデーションを通り、成功すればリダイレクト、失敗でエラー内容を渡し再renderするという流れです。

現状エラー処理を行ったあと、renderをする直前で@postsを渡していないので、エラーが出ている状態です。
ここで渡す@postsにshowの際に渡した@postsを再利用したいと考えているのですが可能でしょうか。

その場合、whereの検索条件をすべて渡し
@posts = Post.where(パラメータによっていろいろ条件で絞る)
をもう一度書くような流れとなるのでしょうか。

このページはいろいろの場所でpost処理を行うため、エラーバリデーション後にこの処理を多く書かないといけないため、かんたんに以前にshowした際の@postsを再利用できたら良いなと考えていました。

参考になるサイトでも構いませんので、適切な方法をご教示いただけますと幸いです。
よろしくお願いいたします。

ruby

1 2def show 3 @posts = Post.where(パラメータによっていろいろ条件で絞る) 4 render 'homes/show' 5end 6 7def xxxx 8 @aaaa = XXXX.new(name: xxx, yyy: params[:yyy], zzz: params[:zzz]) 9 if @aaaa.save 10 redirect_to controller: 'homes', action: 'show' 11 else 12 # エラー処理 13 # showで渡したものと同条件の@postsをここで使いたい 14 # post時に検索条件と同じパラメータを渡して再び以下のようにしなければならないのか 15 # @posts = Post.where(パラメータによっていろいろ条件で絞る) 16 render 'homes/show' 17 end 18end 19 20 21# show.html.erb 22<% @posts.each do |post| %> 23 いろいろ処理 24<% end %>

環境
Amazon Linux release 2 (Karoo)
Rails 5.2.3
Ruby version: 2.6.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

@postの再利用は出来ません。
@で始まるインスタンス変数はそのインスタンスの中でのみ使えます。インスタンス外からアクセスできるようにすることは可能ですが、インスタンスがなくなると消えます。
コントローラのインスタンスは、ブラウザからのリクエストで作成され、リクエストに答えるとなくなります。showで作られたリクエストはshowの出力が終わると無くなってますので、その@postもなくなっています。

投稿2019/11/26 12:58

winterboum

総合スコア23567

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

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

lyzmfeqpxs54

2019/11/26 13:40

ご回答ありがとうございます。 条件で絞ったモデルを再利用するうまい方法は、他にはないでしょうか?
winterboum

2019/11/26 22:48

その答えはご自身で出しているではないですか。 絞り込み条件をviewにわたして、それに基づいてまた絞り込みです。 form、submitならhiddenにいれて、linkならlinkパラメータにいれて
lyzmfeqpxs54

2019/11/27 01:27

ご回答ありがとうございます。 そういった方法を取るのが正攻法なのですね。 たびたびのご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問