如何将变量从一个控制器传递到另一个控制器? (导轨)

时间:2014-08-14 19:14:21

标签: ruby-on-rails

我有控制器操作(welcome #index):

class WelcomeController < ApplicationController
  def index
    @card = current_user.cards.review_before(Date.today).first
    @my_test_variable #this variable from another controller
  end
end

我有另一个控制器:

class CardsController < ApplicationController

    def review
    if @card.check = true
      @my_test_variable = 1
    else
      @my_test_variable = 2
    end
    redirect_to root_path #redirect to welcome#index 
  end
end

如何将@my_test_variable值放入动作索引控制器欢迎在视图索引中使用它?

4 个答案:

答案 0 :(得分:2)

我不会质疑您为什么要这样做但是一个解决方案是使用参数重定向到root_path然后在另一个控制器中抓取它:

class CardsController < ApplicationController
    def review
    if @card.check == true
      @my_test_variable = 1
    else
      @my_test_variable = 2
    end
    redirect_to root_path(my_test_variable: @my_test_variable)
  end
end

class WelcomeController < ApplicationController
  def index
    @card = current_user.cards.review_before(Date.today).first
    @my_test_variable = params[:my_test_variable] # will be a string
  end
end

(顺便说一句,你在if语句中有一个拼写错误。应该是==,而不是=)

答案 1 :(得分:2)

我认为您要问的是如何将它们提供给下一个请求。把它们放在会话中:

class CardsController < ApplicationController
  def review
    if @card.check = true
      session[:my_test_variable] = 1
    else
      session[:my_test_variable] = 2
    end
    redirect_to root_path #redirect to welcome#index 
  end
end

class WelcomeController < ApplicationController
  def index
    @card = current_user.cards.review_before(Date.today).first
    session[:my_test_variable]    
  end
end

答案 2 :(得分:1)

卡片控制器中的登录应该在模型中,然后你不必担心你采取的方法。

处理一个请求涉及2个控制器实例非常罕见。

答案 3 :(得分:1)

简单的方法是将变量设置为全局变量,以便可以从任何控制器进行评估,然后将其变为null。

class ModelController < ApplicationController

 def index

    $count = 125
  end

end

class PaymentController < ApplicationController

  def price

    puts $count
  end

end