Rails:如何在after_commit方法中传递帖子的URL

时间:2011-04-16 02:10:52

标签: ruby-on-rails ruby-on-rails-3 url parameter-passing

我遇到了一些麻烦,想知道如何为每个用户帖子创建一个url(在我的应用程序中称为supportposts)并将其传递给after_commit方法。现在我可以传递支持信息的属性,例如标题和内容,它们分享给twitter:

supportpost.rb

after_commit :share_all

def share_all
 if user.authentications.where(:provider => 'twitter').any?
 user.twitter_share(title, content)
 end
end

user.rb

def twitter_share(title, content) 
  twitter.update("#{title}, #{content}")           #<--- this goes to twitter feed 
end

现在我真正想要做的是将支持信息的URL分享到Twitter提要中。我正试图在模型之外访问url helper,但是它弄乱了我的路线并且我得到了RoutingError(没有路由匹配{:action =&gt;“destroy”,:controller =&gt;“supportposts”})

supportpost.rb

after_commit :share_all

Rails.application.routes.url_helpers.supportpost_url(@supportpost, :host => 'examplehost.com') 

def share_all
if user.authentications.where(:provider => 'twitter').any?
 user.twitter_share(supportpost_url)
 end
end

我在这里做错了什么?如何将URL正确传递到twitter_share?

这里是我的路线和suppostpost控制器/型号http://pastie.org/1799492

1 个答案:

答案 0 :(得分:0)

def share_all
  if user.authentications.where(:provider => 'twitter').any?
    supportpost_url = Rails.application.routes.url_helpers.url_for :action => :show, :controller => 'supportposts', :id => self, :host => 'example.com'
    user.twitter_share(supportpost_url)
  end
end

Rails.application.routes.url_helpers.supportpost_url(@supportpost, :host => 'examplehost.com') 你拥有它不会有任何好处。哦,顺便说一下,我在这个例子中使用了url_for(),但你也可以像上面的问题一样使用supportpost_url()。这里的主要内容是你调用方法的地方。

我希望这会有所帮助。