0

我需要一些帮助来确定我正在处理的模块。如前所述,我正在使用 rails 3、jquery token.input 和 koala 进行 facebook 集成。我想要完成的是从 facebook 获取用户的所有朋友并使用 jquery tokeninput 来选择某些朋友。用户点击提交后,好友的 ID 将保存在数据库中。ryan 在他精彩的屏幕截图中向我们展示了如何搜索数据库,但我遇到的情况是通过数组(二维)搜索并在用户界面中更新。

控制器代码:

def index 
  @graph = Koala::Facebook::GraphAPI.new(access_token)
  @friends = @graph.get_connections("me","friends")
  # now the @friends contains all the friends of the user, how do i get something
  # like to work Friends.where("%params[:q]%") on @friends

  respond_to do |format| 
    format.html
    format.json {:render :json => @friends} 
  end 
end 

我如何搜索一个数组现在有一些我可以做的事情

@friends.include?('%params[:q]%') 
4

1 回答 1

0

您可以使用select只返回您需要的朋友

pry(main)> @friends
=> [{"name"=>"Foo bar", "id"=>"1"},
 {"name"=>"Bar Foo", "id"=>"2"},
 {"name"=>"Mark Zuckerberg", "id"=>"4"}]
pry(main)> params[:q]
=> ["1", "2"]
pry(main)> @friends.select{|friend| params[:q].include? friend['id']}                                                                                                              
=> [{"name"=>"Foo bar", "id"=>"1"}, {"name"=>"Bar Foo", "id"=>"2"}]

但是,如果您只想要其中的一些,我建议避免获取所有朋友。您可以使用以下条件进行 fql 查询:

pry(main)> graph.fql_multiquery(query1: "select uid2 from friend where uid1 = me() and uid2 IN (#{params[:q].join(',')})", query2: 'select uid , name from user where uid in (select uid2 from #query1)')
=> {"query1"=>[{"uid2"=>"1"}, {"uid2"=>"2"}],
 "query2"=>
  [{"uid"=>1, "name"=>"Foo bar"},
   {"uid"=>2, "name"=>"Bar Foo"}]}
于 2011-10-26T17:16:17.080 回答