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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1325閲覧

railsのコントローラーのアクションのインスタンス変数を、別のActionでもつかいたい

renren643

総合スコア279

Ruby

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

Ruby on Rails

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

1グッド

0クリップ

投稿2018/10/12 11:49

railsのコントローラーのアクションのインスタンス変数を、別のActionでもつかいたいのですが、どうしたらいいのでしょうか?
たとえば、以下の例で言うと、loginメソッドを実行した際の帰り値となる、「@login_driver」をautoexhibitメソッドに渡し、libで定義しているOtAutoExhibitクラスの、a_hoge_exhibitメソッドで使いたいです。

class UsersController < ApplicationController def index end def login ec = OtLogin.new @login_result, @login_driver = ec.hoge_login(login_params) end def autoexhibit(@login_driver) otamart = OtAutoExhibit.new @auto_exhibit_result = otamart.a_hoge_exhibit(@login_driver) end
退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

loginアクションを実行した後にautoexhibitメソッドを実行し、
その際にloginアクション内で定義したインスタンス変数を使用したい、ということでしょうか。
その場合、フィルタを使用してloginメソッド実行後にautoexhibitメソッドを実行させることで実現できると思います。
例:

class HogeController < ApplicationController after_action :hoge, only: [:login] def login @hoge = "hoge" end private def hoge session[:hoge] = hoge_method(@hoge) end end

Railsガイド

インスタンス変数に値を格納しておけば、同一クラスのインスタンスメソッド内で使用することができます。
またsessionインスタンスに格納しておけばViewでも使えます。

投稿2018/10/15 11:40

troch

総合スコア349

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

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

renren643

2018/10/15 13:19

回答ありがとう御座います。この場合 loginメソッドはちがうメソッドを実行する度に毎回実行されてしまうと思いますが、 def login <色々な処理> return @login_driver end の<色々な処理>は毎回はやらずに、一度loginメソッドを実行したら、返り値の@login_driverだけを一時的に保持して、その「インスタンス変数を破棄する」という動作をするまで、そのインスタンス変数を違うメソッドで使用したいのですが、それは可能でしょうか?
troch

2018/10/15 23:30

コメントありがとうございます。 . > 一度loginメソッドを実行したら、返り値の@login_driverだけを一時的に保持して、その「インスタンス変数を破棄する」という動作をするまで、そのインスタンス変数を違うメソッドで使用したい . ユーザがログイン後にユーザ情報を保持したい(ログイン状態を維持したい)という趣旨でしょうか? その場合はsessionが使えると思います。 session[:hoge] = 値 とするとクライアントのcookieに値が保存され、 session[:hoge]で呼び出すことが出来ます。 session[:hoge] = nil で値を破棄することもできます。 Railsでページをまたいで値を受け渡す際に使えると思います。 http://railsdoc.com/references/session
troch

2018/10/17 11:19

補足 > loginメソッドはちがうメソッドを実行する度に毎回実行されてしまうと思いますが、 after_action :hoge, only: [:login] としているのでloginアクション実行時のみhogeメソッドが実行される形になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問