2012-06-18 5 views
1

Observer를 사용하여 Facebook Open Graph에 물건을 보내고 싶습니다.Observer 내부 url_for (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 위반"처럼 들리지만,이 경우 나는 그것이 필요하다고 생각합니다.

해킹하지 않고 만드는 방법에 대한 아이디어가 있으십니까? 이 포함

답변

2

음을 :

include Rails.application.routes.url_helpers

도움이됩니다. 예심이 올 때 나는 변명 할 것이다.

을 추가해야

더 많은 물건 : 모든 환경 파일에서

(설정/환경/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