我正在尝试使用以下代码,但是它给了我一个未定义的变量错误:
class PagesController < ApplicationController
@company = "Acme"
def home
@title = "Welcome to #{company}"
end
def faq
@title = "FAQ | #{company}"
end
end
如何在函数中访问@company?
答案 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