我正在尝试通过玩弄东西来学习Ruby on Rails,而我正在尝试使用Grit。但是我有点困惑来自PHP背景,我从中得到回购的东西。我的代码
class RepoController < ApplicationController
require "grit"
repo = Grit::Repo.new("blahblahblah")
def index()
puts YAML::dump(repo)
end
def show()
repo.commits('master', 10)
puts repo.inspect
end
end
我试图转储关于对象的信息,但我似乎无法访问repo变量。我的IDE和Ruby一直在说undefined local variable or method repo'
,我不知道为什么它不能访问repo变量,它是在类的顶部声明的?
答案 0 :(得分:2)
你有范围问题。尝试:
require 'grit'
class RepoController < ApplicationController
def repo
@repo ||= Grit::Repo.new("blahblahblah")
end
def index()
puts YAML::dump(repo)
end
def show()
repo.commits('master', 10)
puts repo.inspect
end
end
答案 1 :(得分:1)
您的repo变量正在索引和显示操作中可见的范围之外定义。可能你想要的是这样的:
class RepoController < ApplicationController
before_filter :set_repo
def index()
puts YAML::dump(@repo)
end
def show()
@repo.commits('master', 10)
puts @repo.inspect
end
def set_repo
@repo = Grit::Repo.new("blahblahblah")
end
end
在加载控制器时创建实例变量。另外,你需要从那里得到那个require语句,并将gem“grit”放在你的Gemfile中。