Я пытаюсь использовать метод after_commit для передачи параметров из поста в пользовательскую модель, где он используется в твиттере другим методом.
Это прекрасно работает, когда я просто передаю что-то из пост-модели, например, 'title' или 'content':
post.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}")
end
Но это насколько я понимаю, я читал в другом месте, что я мог бы передать «я» вместо «заголовок» и «контент», и все же иметь возможность использовать «заголовок» и«контент» плюс любая другая вещь из модели, такая как «made_at».Тем не менее, я не могу заставить это работать, я пробовал это:
post.rb
def share_all
if user.authentications.where(:provider => 'twitter').any?
user.twitter_share(self)
end
end
user.rb
def twitter_share(self)
twitter.update("#{title}, #{content}")
end
И яget SyntaxError (/Users/ihal/Desktop/dayor/app/models/user.rb:118: синтаксическая ошибка, непредвиденное ключевое слово_self, ожидая ')' def twitter_share (self)
И отправляет это в twitter #
Мой вопрос заключается в том, как правильно настроить передачу 'self', чтобы любой параметр можно было вызывать с помощью twitter.update ()?
Также, как вы выполняете вытягиваниеURL для поста, чтобы вы могли передать URL для публикации в твиттере?
Редактировать:
Попытка Rails.application.routes.url_helpers.post_url (@post,: host =>'myhost.com')
в post.rb
class Post < ActiveRecord::Base # line 19
after_commit :share_all
Rails.application.routes.url_helpers.post_url(@post, :host => 'myhost.com') #line 37
def share_all
if user.authentications.where(:provider => 'twitter').any?
user.twitter_share(self)
end
end
Когда я иду, чтобы удалить сообщение, я получаю сообщение об ошибке:
Started POST "/ posts /32 "для 127.0.0.1 в 2011-04-15 14:57:17 -0700 Обработка PostsController # destroy как HTML Параметры: {" authenticity_token "=>" x8KkqLLCLdTOouUfCMzyWWmwxLIKThnE1n3rQNSkew8 ="," id "=>" 32 "} Пользовательская нагрузка (1,1 мс) ВЫБЕРИТЕ" users ". * FROM" users "WHERE (" users "." id "= 5) LIMIT 1 Завершено за 82 мс
ActionController :: RoutingError (маршрут не соответствует {: action => "destroy",: controller => "posts"}): app / models / post.rb: 37: в <class:Post>'
app/models/post.rb:19:in
'app / controllers / posts_controller.rb:36: in authorized_user
1040 * Rendered /Users/ihal/.rvm/gems/ruby-1.9.2-p136@rails3gemset/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/routing_error.erb в пределах rescues / layout (1.2ms)
пост-контроллер
def destroy
@post.destroy
redirect_to root_path
end
private
def authorized_user
@post = Post.find(params[:id]) #line 36
redirect_to root_path unless current_user?(@spost.user)
end
end