我有一个现有的 Rails 应用程序,我正在向其中添加一个新控制器来处理来自我正在构建的小型 facebook 应用程序(使用 facebooker 插件)的请求。
在 facebook 应用程序的配置中,我将画布回调 url 设置为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 控制器中的每个操作都执行此操作。