2012-04-05 51 views
0

Ich versuche Ruby on Rails zu lernen, indem ich mit Sachen herumspiele und versuche, mit Grit herumzuspielen. Allerdings bin ich etwas verwirrt, da ich von einem PHP-Hintergrund komme, wo ich die Repo-Sachen herbekomme. Mein CodeRuby On Rails Grundvariable

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 

Ich versuche, Informationen über die Objekte zu entleeren, aber ich kann nicht die Repo-Variable zugreifen scheinen. Meine IDE und Ruby sagen weiter undefined local variable or method repo' und ich weiß nicht, warum es nicht auf die Repo-Variable zugreifen kann, wird es an der Spitze der Klasse deklariert?

Antwort

2

Sie haben Probleme mit dem Oszilloskop. Versuchen Sie:

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

Ihre Repo-Variable wird außerhalb des Bereichs definiert, der in Ihrem Index sichtbar ist und Aktionen anzeigt. Wahrscheinlich, was Sie wollen, ist etwas wie folgt:

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 

Das erstellt eine Instanzvariable, wenn der Controller geladen ist. Zusätzlich solltest du diese require-Anweisung herausholen und stattdessen "gem" in deine Gemfile einfügen.