Ruby on rails Ruby中的简单变量作用域

Ruby on rails Ruby中的简单变量作用域,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图让以下代码正常工作,但它给了我一个未定义的变量错误: class PagesController < ApplicationController @company = "Acme" def home @title = "Welcome to #{company}" end def faq @title = "FAQ | #{company}" end end class PagesController

我试图让以下代码正常工作,但它给了我一个未定义的变量错误:

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

如何在函数中访问@company?

您可以像这样直接访问它

class PagesController < ApplicationController
  @@company = "Acme"  # class var
  def home
    @title = "Welcome to #{@@company}"
  end
  def faq
    @title = "FAQ | #{@@company}"
  end
end
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
或者像这样定义一个自定义getter方法

class PagesController < ApplicationController
  @@company = "Acme"  # class var
  def home
    @title = "Welcome to #{@@company}"
  end
  def faq
    @title = "FAQ | #{@@company}"
  end
end
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
或者从数据库中获取公司名称

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
class PagesController
您可以像这样直接访问它

class PagesController < ApplicationController
  @@company = "Acme"  # class var
  def home
    @title = "Welcome to #{@@company}"
  end
  def faq
    @title = "FAQ | #{@@company}"
  end
end
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
或者像这样定义一个自定义getter方法

class PagesController < ApplicationController
  @@company = "Acme"  # class var
  def home
    @title = "Welcome to #{@@company}"
  end
  def faq
    @title = "FAQ | #{@@company}"
  end
end
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
或者从数据库中获取公司名称

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
class PagesController
就像在Ruby中一样,每个类也是一个对象,这里您要做的是在类对象PagesController上设置一个名为@company的实例变量,而不是在PagesController的实例上

您可能希望使用常量而不是实例变量。也许是这样:

class PagesController < ApplicationController
  COMPANY = "Acme"

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

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

如果你想让公司改变你所显示的“页面”,你应该考虑添加一个页面模型,该模型拥有一个公司名称或与另一个名为Cype的模型的关联。

< P> >在Ruby中,每个类也是一个对象,这里要做的是在类对象PagesController上设置名为@company的实例变量,而不是在PagesController的实例上

您可能希望使用常量而不是实例变量。也许是这样:

class PagesController < ApplicationController
  COMPANY = "Acme"

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

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

如果你想让公司改变你所显示的“页面”,你应该考虑添加一个页面模型,该页面模型拥有公司名称或与另一个名为Company的模型的关联。第二个是好的做法吗?我认为使用getter访问类变量比直接访问更好。我提供了一个更动态的示例,从当前登录的用户检索公司名称感谢macek,动态示例很棒,但出于我的需要,一个简单的常量可能更好。第一个示例在#(@company)中不输出任何内容,第二个示例是一个好的实践吗?我认为使用getter访问类变量比直接访问更好。我提供了一个更动态的示例,从当前登录的userk检索公司名称,动态示例很好,但对于我的需要,一个简单的常量可能更好。