在rails应用程序中设置facebook canvas url和路由的正确方法

时间:2010-02-18 08:46:56

标签: ruby-on-rails facebook routing facebooker

我有一个现有的rails应用程序,我正在添加一个新的控制器来处理来自我正在构建的小型facebook应用程序(使用facebooker插件)的请求。

在Facebook应用程序的配置中,我将画布回调网址设置为http://my.host.ip/fb/

在纯粹的facebook应用程序中,url会离开/ fb /并且用户将被定向到应用程序的主页。但由于这是一个现有的应用程序,我不能这样做。

现在在我的routes.rb中我有:

map.connect '/fb/like/:id', :controller => 'facebook_app', :action => "like"
map.connect '/fb/:category', :controller => 'facebook_app', :action => "index", :category => "default"

当用户访问http://apps.facebook.com/my_app_name/时,Facebook会调用http://my.host.ip/fb/并且呈现正常。

在该页面上,我有“喜欢”行动的链接:

<%= link_to "like", :controller => "fb", :action => "like", :id => id %>

唯一的问题是这些被渲染为:

http://apps.facebook.com/my_app_name/fb/like/12345

当我想要的是:

http://apps.facebook.com/my_app_name/like/12345

看看/ fb /是如何让我悲痛的?

有解决方法吗?路由定义中的某种方式是说/ fb /仅用于传入的URL?或者在url生成器中以某种方式省略/ fb /?

我找到了一个解决方法......如果我将此路线添加到现有的“喜欢”路线之上:

map.connect '/like/:id', :controller => 'facebook_app', :action => "like"

然后第一个路由是link_to url生成器使用的内容,并生成正确的URL:

http://apps.facebook.com/my_app_name/like/12345

点击后会导致facebook向我的应用发出此请求:

http://my.host.ip/fb/like/12345

与原来的“喜欢”路线相匹配。

我宁愿不必为我的facebook控制器中的每个动作执行此操作。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您可以尝试将callback_url设置为http://my.host.ip/。在该操作中,您可以使用request_comes_from_facebook?方法检测请求是否来自Facebook,如果是这种情况,则将其重定向到您的Facebook控制器。

然后您的后续链接将起作用。