1

我想使用观察者将内容发送到 Facebook Open Graph。

粗略地说,类似:

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_foror item_url。但是如何在观察者内部获取 URL?观察者绝对是放置此代码的正确位置,因为可以在许多地方创建项目,并且将调用放在控制器中的每个操作上听起来是错误的。

好吧,这听起来像是“违反 MVC”,但在那种情况下,我认为它是必要的。

任何想法如何在没有黑客的情况下制作它?

4

1 回答 1

2

好吧,包括这个:

include Rails.application.routes.url_helpers

有帮助。审判来临时我会找借口的。

更多应该添加的东西:

在所有环境文件中(config/environments/ENV_NAME.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]

规格:

RSpec.configure do |config|
  config.include Rails.application.routes.url_helpers
于 2012-06-18T05:41:32.983 回答