0

我正在尝试通过玩东西来学习 Ruby on Rails,并且我正在尝试玩 Grit。但是,我从 PHP 背景中获得了 repo 的东西,我有点困惑。我的代码

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 变量,它是在类的顶部声明的?

4

2 回答 2

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
于 2012-04-05T00:52:30.180 回答
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 中。

于 2012-04-05T01:10:13.507 回答