0

したがって、以下のメソッドで正しい構文を取得するのに近づいていると思いますが、完全ではありません。「self」メソッドをいつ使用するかについて、私はいつも混乱します。コンテキストは次のとおりです。以下のメソッドは、データベースに保存されたファイルと現在 Web サイトにあるファイルを比較するためのものです。メソッド自体は、Rails アプリのモデル クラスのメンバーです。

しかし、コンソールでコードを実行すると、「自己」でスタックします。nil クラスでバージョン メソッドを呼び出すことはできません。「自己」について私は何を誤解していますか?この方法を機能させるにはどうすればよいですか?

    def compare
      live_file = download_file
      archive_file = self.versions.last.changeset[:robots_file]
      if live_file != archive_file
        return mismatch
      end 
    end

編集:コンソールに表示されるエラーメッセージは次のとおりです。

NoMethodError: undefined method `versions' for nil:NilClass
from /Users/bendowney/sites/WatchApp/app/models/site.rb:14:in `compare'
from (irb):50
from /Users/bendowney/.rvm/gems/ruby-1.9.3-p194@WatchApp/gems/railties-3.2.5/lib/rails/commands/console.rb:47:in `start'
from /Users/bendowney/.rvm/gems/ruby-1.9.3-p194@WatchApp/gems/railties-3.2.5/lib/rails/commands/console.rb:8:in `start'
from /Users/bendowney/.rvm/gems/ruby-1.9.3-p194@WatchApp/gems/railties-3.2.5/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

編集:答えは以下です。

4

1 に答える 1

0

あなたは皆、正しい質問をします。彼らは私に考えさせました。元の方法に 2 つの変更を加えたところ、現在は機能しています。ダウンロードしたファイル (下の 2 行目) を保存する必要がありましたが、「不一致」ステータスを引用符で囲むのを忘れていました。ご協力いただきありがとうございます!

def compare
  live_file = download_robots_file
  self.save
  archive_file = self.versions.last.changeset[:robots_file]
  if live_file != archive_file
    return "mismatch"
  end 
end
于 2012-07-26T10:58:31.397 に答える