0

コアラの宝石を使用して、ページのチェックインを数えようとしています。レールを使用しています。

user.rbには、Facebook グラフへの新しい接続を取得するためのメソッドがあります。

class User < ActiveRecord::Base
 def facebook
     @facebook ||= Koala::Facebook::API.new(oauth_token)
 end
end

私の school.rb には、チェックインをカウントする方法があります。

class school < ActiveRecord::Base
 def count_checkins(name)
  checkins = @facebook.fql_query("SELECT checkins FROM page WHERE name = #{name}")
 end
end

そして、私は次のようなビューからそれを呼び出しています:

<%= @school.count_checkins(@school.name) %>

しかし、次のエラーが表示されます。

undefined method `fql_query' for nil:NilClass

なぜこのエラーが発生するのか本当に理解できません。どんな助けでも素晴らしいでしょう。

4

1 に答える 1

0

@facebookSchool モデル内で実際にオブジェクトを作成していないようです。確実に知るには、school.rb ファイルの残りの部分を確認する必要があります。次のように School.initialize() メソッド内にオブジェクトを作成することをお勧めします。

def initialize(oauth_token)
  unless oauth_token.nil?
    @facebook = Koala::facebook::API.new(oauth_token)
  end
end

oauth_tokenこれが機能するためには、必要なものを呼び出しに渡す必要がありますSchool.new()。次に@facebook、それぞれに対して 1 つのオブジェクトが作成されますSchool

編集

gistを見た後、私はあなたが実際にUserオブジェクトをインスタンス化し、それに対して facebook メソッドを呼び出したことに気付きました。それは実際にはそれを行うためのより良い方法です。問題は、モデル@current_userのプロパティとして設定する必要がある を使用していることです。代わりschoolにヘルパー関数を使用するつもりだったのでしょう。current_user

 def count_checkins(name)
  u = current_user
  u.@facebook.fql_query("SELECT checkins FROM page WHERE name = #{name}")
 end

それを試してみて、何が起こるか見てください。少なくとも、別のエラー メッセージが表示されるはずです。

編集 2

current_userそのため、関数はモデル コードではなく、コントローラー コードで呼び出す必要があると考えています。これは、現在のユーザーが、アクティブなリクエストの一部である場合を除き、実際には存在しないものであるためです。したがって、次のように関数User uのパラメーターとして取得する必要があります。count_checkins

def count_checkins(name, u)
  u.facebook.fql_query("SELECT checkins FROM page WHERE name = #{name}")
end

呼び出す場所のコードも変更する必要がありますcount_checkins()

count_checkins(name, current_user)

それはそれを行う必要があります。どれどれ!

于 2013-01-21T00:43:56.600 に答える