0

私は何かをいじって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 変数にアクセスできない理由がわかりません。クラスの先頭で宣言されていますか?

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 変数は、 index および show アクションで表示されるスコープ外で定義されています。おそらくあなたが望むのは次のようなものです:

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ステートメントをそこから取り出して、代わりにGemfileにgem "grit"を入れたいと思うでしょう。

于 2012-04-05T01:10:13.507 に答える