Ruby中的简单变量范围

时间:2011-11-22 04:40:38

标签: ruby-on-rails ruby

我正在尝试使用以下代码,但是它给了我一个未定义的变量错误:

class PagesController < ApplicationController
  @company = "Acme"
  def home
    @title = "Welcome to #{company}"
  end
  def faq
    @title = "FAQ | #{company}"
  end
end

如何在函数中访问@company?

2 个答案:

答案 0 :(得分:3)

在Ruby中,每个类都是一个对象,你在这里做的是在类对象PagesController上设置一个名为@company的实例变量,而不是在PagesController的实例上。

您可能需要使用常量而不是实例变量。也许是这样的:

class PagesController < ApplicationController
  COMPANY = "Acme"

  def home
    @title = "Welcome to #{COMPANY}"
  end

  def faq
    @title = "FAQ | #{COMPANY}"
  end
end

如果您希望公司根据您正在显示的“页面”进行更改,则应考虑添加一个页面模型,该模型具有保存公司名称的属性或与另一个名为Company的模型的关联。

答案 1 :(得分:0)

您可以像这样直接访问

class PagesController < ApplicationController
  @@company = "Acme"  # class var
  def home
    @title = "Welcome to #{@@company}"
  end
  def faq
    @title = "FAQ | #{@@company}"
  end
end

或者定义像这样的自定义getter方法

class PagesController < ApplicationController
  @@company = "Acme"
  def home
    @title = "Welcome to #{company}"
  end
  def faq
    @title = "FAQ | #{company}"
  end
  private
  def company
    @@company
  end
end

或从数据库中获取公司名称

class PagesController < ApplicationController
  def home
    @title = "Welcome to #{company}"
  end
  def faq
    @title = "FAQ | #{company}"
  end

  private
  def company
    @company ||= current_user.company  # get company of logged in user (and "cache" it)
    @company.name
  end
end