ruby-on-rails url_for观察者内部(用于Facebook开放图)

bq9c1y66  于 2023-02-26  发布在  Ruby
关注(0)|答案(1)|浏览(134)

我想使用一个观察者发送东西到Facebook的开放图。
大致如下:

class ItemObserver < ActiveRecord::Observer
  observe :item
  def after_create(item)
    FbGraph::User.me(item.user.fb_token).og_action!('blah:add', :item => ...)
  end
end

在控制器或视图中,很明显我可以使用url_foritem_url。但是我如何在观察器中获得URL呢?观察器绝对是放置此代码的正确位置,因为一个项目可以在许多位置创建,而在控制器中的每个操作上都放置此调用听起来是错误的。
嗯,这听起来像是“违反MVC”,但在这种情况下,我认为这是必要的。
有没有什么办法可以不用手工制作?

4zcjmb1e

4zcjmb1e1#

包括这个
include Rails.application.routes.url_helpers
有帮助。开庭时我就有借口了。
更多应该添加的内容:
在所有环境文件中(配置/环境/ENV_名称.rb)

routes.default_url_options = { host: "host-for-that-env.com" }

必须添加主机,因为在常规请求中,主机是从HTTP请求本身计算出来的。
无论在何处包括,请添加:

include Rails.application.routes.url_helpers
default_url_options[:host] = ::Rails.application.routes.default_url_options[:host]

R规范:

RSpec.configure do |config|
  config.include Rails.application.routes.url_helpers

相关问题