Rails: как передать параметр url? - PullRequest
0 голосов
/ 16 апреля 2011

Мне нужно передать URL для каждого сообщения в пользовательскую модель, чтобы его можно было отправить в твиттер. Прямо сейчас я могу передать атрибуты поста, такие как заголовок и контент, который публикуется в твиттере, но я не могу понять, как передать URL поста. Заранее спасибо.

post.rb

after_commit :share_all

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

user.rb

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

1 Ответ

1 голос
/ 16 апреля 2011

Я не пробовал и не проверял это, но я думаю, вы можете сделать что-то вроде:

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

До этого в вашей модели добавьте:

include ActionController::UrlWriter

Это также сделает помощника по URL доступным в вашей модели. Вы можете прочитать this , чтобы получить больше информации об этом.

Пожалуйста, попробуйте это тоже (нашел на эта страница снова):

Rails.application.routes.url_helpers.post_url(self, :host => "your_host")

[EDIT]

Я только что прочитал вашу суть , что вы должны сделать, это вместо этого:

## posts.rb
  after_commit :share_all
  def share_all
     # note that I am using self inside the method not outside it.
     url =  Rails.application.routes.url_helpers.post_url(self, :host => "localhost:3000")
     if user.authentications.where(:provider => 'twitter').any?
        user.twitter_share(url)  
    end
  end

Или:

  include ActionController::UrlWriter #very important if you use post_url(..) directly
  after_commit :share_all
  def share_all
     # if you use the url helper directly you need to include ActionController::UrlWriter
     url =  post_url(self, :host => "localhost:3000")
     if user.authentications.where(:provider => 'twitter').any?
        user.twitter_share(url)  
    end
  end

очень очень важно, чтобы вы получили этот URL внутри метода share_all , а не вне его, потому что self не имеет одинакового значения, будь то внутри или снаружи. Когда он находится внутри метода, self ссылается на экземпляр Post, для которого вызывается метод share_all. Когда он снаружи, это сам класс Post.

Я проверил эти два варианта, и они отлично работают:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...