1

オブザーバーを使用して、FacebookOpenGraphにデータを送信したいと思います。

大まかに言って、次のようなものです。

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違反」のように聞こえますが、その場合は必要だと思います。

ハックなしでそれを作る方法のアイデアはありますか?

4

1 に答える 1

2

まあ、これを含めて:

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
于 2012-06-18T05:41:32.983 に答える