2012-04-05 156 views
0

我想通过玩玩东西来学习Ruby on Rails,我正在尝试与Grit一起玩。不过,我有点困惑,来自PHP背景,我从中得到回购的东西。我的代码Ruby On Rails基本变量

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 

我想转储出对象的信息,但我似乎无法访问回购变量。我的IDE和Ruby一直在说undefined local variable or method repo',我不知道为什么它不能访问repo变量,它是在类的顶部声明的?

回答

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

你的回购变量被定义了范围认为这是在你的指数可见,并显示操作。可能你想要的是这样的:

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 

这将创建一个实例变量,当控制器加载。此外,您将希望从那里获取该需求语句,并将Gem“砂砾”放入您的Gemfile中。