Ruby On Rails基本变量

时间:2012-04-05 00:47:13

标签: ruby-on-rails ruby

我正在尝试通过玩弄东西来学习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变量,它是在类的顶部声明的?

2 个答案:

答案 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中。