0

特定のページスローfacebook-graphのチェックインの量を取得するレーキタスクを作成する方法をいじっています。コアラの宝石とレールを使用しています。

これを行うには、rake タスクを作成します。

task :get_likes => :environment do
    require 'koala'
    # Grab the first user in the database
    user = User.first

    # Loop throw every school & and call count_checkins
    School.columns.each do |column|
        user.facebook.count_checkins(column.name, user)
    end
end
# Count like for every school else return 0
def count_checkins(name, u)
    a = u.facebook.fql_query('SELECT checkins FROM page WHERE name = "' + name + '"')
    if a[0].nil?
        return 0
    else 
        return b = a[0]["checkins"]
    end
end
# Initialize an connection to the facebook graph
def facebook
    @facebook ||= Koala::Facebook::API.new(oauth_token)
end

しかし、私はエラーが発生します:

private method `count_checkins' called for #<Koala::Facebook::API:0x007fae5bd348f0>

レーキタスクをコーディングするためのアイデアやより良い方法は素晴らしいでしょう!

ここで完全なエラーを確認してください: https://gist.github.com/shuma/4949213

4

1 に答える 1

0

コメントでこれを正しくフォーマットすることができないので、私はそれを答えに入れます。私は以下をユーザーモデルに入れます:

# Count like for every school else return 0
def count_checkins(name)
    a = self.facebook.fql_query('SELECT checkins FROM page WHERE name = "' + name + '"')
    if a[0].nil?
        return 0
    else 
        return b = a[0]["checkins"]
    end
end

# Initialize an connection to the facebook graph
def facebook
    @facebook ||= Koala::Facebook::API.new(oauth_token)
end

次に、レーキタスクを次のように変更します。

task :get_likes => :environment do
    require 'koala'
    # Grab the first user in the database
    user = User.first

    # Loop throw every school & and call count_checkins
    School.columns.each do |column|
        user.count_checkins(column.name)
    end
end

このように、count_checkinsは、コアラ内のクラスを変更しようとするのではなく、ユーザーモデルで定義されます。また、必要以上のUserパラメーターとFacebookパラメーターを渡す必要があるため、作業が重複することはありません。

于 2013-02-13T23:42:19.127 に答える