LoginSignup
0
1

More than 5 years have passed since last update.

redirect_toやrenderのオプションではなく、sessionを使いました。

Last updated at Posted at 2018-07-15

Ruby on rails

やりたいこと・・・アクション間のデータの受け渡し

インスタンス変数を使えば良いと思って、インスタンス変数@hogeをshowアクションとmy_checkアクションに記述して、my_checkアクション内で、showアクションをredirect_toして、binding.pryで確認したところ、アクション間ではインスタンス変数@hogeはデータを受け渡しできないことがわかりました。
つまり、my_checkアクションでは@hogeにデータが入っているのに、my_checkアクションからredirect_toされたshowアクション内の@hogeを見ると、nilになっていました。

ということで、アクション間でデータを送りたい場合は、sessionを使おうということです。

自分は思い込みで、redirect_toかrenderに引数(オプション)をパラメータとして指定してやれば、アクション間でのデータの受け渡し(共有?)をできると思って、いろいろコードをいじってましたが、駄目でした。
結構悩んだので、ここにメモって置きます。と言っても、1日くらいですが。
誰かの参考になりますかね〜。

サンプルコードはこんな感じです。

XXXs_controller.rb
def show
  @my_data = session[:my_session]
  //このあと、@my_datashow.html.erbで利用する
end

def my_check
  session[:my_session] = 1
  redirect_to controller: 'XXXs', action: 'show'
end

以下のサイトを参考にしました。
https://qa.atmarkit.co.jp/q/3159

追記 セッションを使わなくてもいい

quizzes_controller.rb
def select
  redirect_to controller: 'quizzes', action: 'show', id: params[:id], 
answered: @answered_quiz_ids
end

こんな感じで、selectアクションからshowアクションにパラメータを渡せました。別の書き方をすると、うまくパラメータが渡せなかった。というか、こんなところで、セッションとか使わない方がいいですね、やはり。とりあえず、いろいろ試行錯誤しているということです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1