我想使用观察者将内容发送到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_for
或item_url
。但是,如何在观察器中获取 URL?观察者绝对是放置此代码的正确位置,因为可以在许多位置创建项,并且将该调用放在控制器中的每个操作上听起来都是错误的。
好吧,这听起来像是"违反 MVC",但在这种情况下,我认为这是必要的。
任何想法如何在没有黑客的情况下制作它?
嗯,包括这个:
include Rails.application.routes.url_helpers
帮助。审判到来时我会有借口的。
应该添加的更多内容:
在所有环境文件(config/environment/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:
RSpec.configure do |config|
config.include Rails.application.routes.url_helpers