你如何从Rail创建控制器调用模型的show url?

时间:2012-05-03 09:39:00

标签: ruby-on-rails koala

我在创建控制器中调用模型的显示路径时遇到了问题。

我在Rails 3.2应用程序中使用Koala gem。当用户创建特定记录类型时,我正在尝试自动发布到Facebook的开放图表。

我设置了一个页面,其中包含所有必需的FB元标记。

我可以从控制台运行Koala方法,一切正常。

但如果我尝试从控制器运行它,我会收到错误。

我的控制器看起来像这样:

def create
  @fb_model = current_user.fb_models.build(params[:fb_model])   
  if @fb_model.save
    Koala::Facebook::API.new(app_token).put_connections( current_user.fb_uid, "namespace:action", :object => fb_model_url(@fb_model) ) 
    respond_to do |format| 
      format.html { redirect_to(@fb_model, :notice => 'Successfully created.') }
      format.xml  { render :xml => @fb_model, :status => :created, :location => @fb_model }    
    end
  else
    respond_to do |format|
      format.html { render :action => "new" }
      format.xml  { render :xml => @fb_model.errors, :status => :unprocessable_entity }
    end
  end
end

当我创建记录时,我的日志显示:

Koala::Facebook::APIError (HTTP 500: Response body: {"error":{"type":"Exception","message":"Could not retrieve data from URL."}}):

如果我编辑控制器以使用静态网址进行测试,一切正常。

  ...
  if @fb_model.save
    Koala::Facebook::API.new(app_token).put_connections( current_user.fb_uid, "namespace:action", :object => "http://myapp.com/fb_model/2" ) 
  ...

为什么我不能使用fb_model_url(@fb_model)从创建控制器中将记录的URL传递给FB?

3 个答案:

答案 0 :(得分:3)

我最终走到了最底层。这实际上是一个非常令人沮丧的问题,因为没有迹象表明这是任何日志或其他地方的问题。

问题在于我在Heroku上部署/测试,并且只运行了1个web dyno。我的应用无法同时处理Facebook请求和发布/获取,导致错误。

另一个问题Facebook Open Graph from Rails Heroku已经解决了这个问题。这真的不是我期待的,我在之前的任何搜索中都没有遇到过这个问题。希望这可以帮助别人。

我通过从瘦身转向独角兽解决了这个问题。

答案 1 :(得分:0)

保存父模型后,

构建完成,您似乎不在父模型上运行。

我认为你真的想要这个:

@fb_model = current_user.fb_models.new(params[:fb_model])

你似乎两次调用@ fb_model.save这是错误的。

答案 2 :(得分:0)

感谢您发布您的调查结果 - 过去几天我一直在处理这个问题,并且不会想到这一点。那么当你只是增加你的dyno负载时,你不再有这个错误?即使我的'put_connections'回调在heroku控制台中工作,我也只是在使用Javascript SDK。