从多个模型中访问变量

时间:2014-05-17 02:53:13

标签: ruby-on-rails ruby ruby-on-rails-4

我的Rails应用程序有六个不同的部分,所有部分都有自己的模型,视图和控制器。

我正试图创建一个"仪表板"访问每个部分的变量的页面。例如,在我的一个控制器中,我有这样的条件:

if @retirementsavingsdiff < 0
  @retiregrade = "pass"
end

我似乎无法从不同的视图/控制器访问此变量。

我是否将仪表板逻辑放在 application_controller.rb 中?

3 个答案:

答案 0 :(得分:3)

使代码可重用的一个好方法是将其分离为模块。 Rails 4包含一些名为Concerns的东西,这使得这很容易。这是一篇带有good illustration of using Concerns for Controllers的博客文章,以下是您的代码可能类似的示例:

# /app/controllers/concerns/retirement_grade_checker.rb
module RetirementGradeChecker
  extend ActiveSupport::Concern

  def check_retire_grade
    @retirementsavingsdiff = params[:retirementsavingsdiff]
    if @retirementsavingsdiff < 0
      @retiregrade = "pass"
    end
  end
end

# /app/controllers/retirement_controller.rb
class RetirementController < ApplicationController
  include RetirementGradeChecker

  def index
    check_retire_grade
    #... other stuff
  end
end

# /app/controllers/dashboard_controller.rb
class DashboardController < ApplicationController
  include RetirementGradeChecker

  def index
    check_retire_grade
    #... other stuff
  end
end

答案 1 :(得分:1)

我会避免使用视图助手,而是创建一个包含所有逻辑的新类或模块。通过这样做,您可以在需要时重用该逻辑。

为什么这样做而不是助手呢?你可以轻松测试它。

答案 2 :(得分:0)

helpers中定义的

方法可在所有视图中自动使用。

如果要将控制器内定义的方法转换为辅助方法,也可以这样做:

def my_method
  # code
end

 helper_method :my_method

更新:

这是API

的示例
class ApplicationController < ActionController::Base
  helper_method :current_user, :logged_in?

  def current_user
    @current_user ||= User.find_by(id: session[:user])
  end

  def logged_in?
    current_user != nil
  end
end