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,每个School.

编辑

看了要点之后,我意识到你实际上已经实例化了一个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 回答