Разъяснение того, как использовать "thumbs_up" камень для голосования с Rails 3
Я пытаюсь внедрить thumbs_up голосовой камень в приложении Rails 3, однако инструкции неясны в отношении фактической реализации. После запроса драгоценного камня [ gem 'thumbs_up'] и после создания и запуска соответствующей миграции [ рельсы генерируют thumbs_up && & rake db: migrate] README объясняет следующее:
Чтобы проголосовать за модель, вы можете сделать следующее:
* Сокращенный синтаксис
voter.vote_for (доступно для голосования) # Добавляет +1 голосовать
voter.vote_against (подлежит голосованию) # Добавляет -1 голос
voter.vote(голосов, голосовать) # Добавляет +1 или -1 голосов: vote = > true (+1), vote = > false (-1)
voter.vote_exclusive_for (доступно для голосования) # Удаляет все предыдущие голоса конкретный избиратель, и голосует за.
voter.vote_exclusive_against (доступен для голосования) # Удаляет все предыдущие голоса конкретным избирателем и голосами против. *
Я предполагал, что использование "избирателя" и "голоса" в примере README представляет собой stand-ins для объектов в приложении, но использование по-прежнему остается туманным для меня.
Литературным примером того, как должен выглядеть мой просмотр, контроллер и файл route.rb, будет помощь TREMENDOUS. Я потратил дни, пытаясь понять это!
В моем приложении у меня есть Пользователи, которые голосуют в сообщениях - из которых есть два типа - События и ссылки. Сообщения вызываются с использованием <% = render: partial = > @posts% > , и каждый отдельный пост использует в качестве своего представления " _event.html.erb" или " > _link.html.erb" - зависит от того, является ли это событием или ссылкой.
Ответы
Ответ 1
Надеюсь, я немного помогу вам.
Генераторы должны создать для вас модель голосования. Это модель, которая содержит все голоса, но вы косвенно взаимодействуете с помощью методов, описанных выше.
Итак, для вас:
class User < ActiveRecord::Base
acts_as_voter
end
class Post < ActiveRecord::Base
acts_as_voteable
end
Это поможет вам настроить методы thumbs_up в каждой из моделей.
Тогда, например, если у вас есть действие контроллера в PostsController, связанное с "стрелкой вверх" на вашем веб-сайте, вы можете создать голосование для этого пользователя для этого сообщения.
Вид такой:
<%= link_to('vote for this post!', vote_up_post_path(@post), :method => :post) %>
и route.rb:
resources :posts do
member do
post :vote_up
end
end
И, наконец, в контроллере:
class PostsController < ApplicationController
def vote_up
begin
current_user.vote_for(@post = Post.find(params[:id]))
render :nothing => true, :status => 200
rescue ActiveRecord::RecordInvalid
render :nothing => true, :status => 404
end
end
end
Ответ 2
Ошибка маршрутизации
Нет совпадений маршрутов {: action = > "vote_up",: controller = > "microposts",: Идентификатор = > ноль}
это ссылка, которую я использую, и предположим, что это то, где маршрутизация не указана правильно. Я запускал маршруты рейка, и есть маршрут, называемый vote_up_micropost. Есть ли что-нибудь еще, что я должен изучить. Спасибо вам
вот ссылка, которую я добавил
<%= link_to('vote for this post!',
vote_up_micropost_path(@microposts),
:method => :post) %>
Ответ 3
Это просто продолжение ответа Брэди.
У Брэди был следующий код в его представлении
<%= link_to('vote for this post!', vote_up_post_path(@post), :method => :post) %>
то, что он имеет в виду, потому что link_to по умолчанию использует :method => 'get'
, и он хотел обновить запись с помощью сообщения, а не получить, чтобы он использовал :method => 'post'
U может использовать <% = button_to ( "голосовать за этот пост!", vote_up_post_path (@post)% > , потому что кнопка по умолчанию использует :method => :post
поэтому маршруты должны быть
resources :posts do
member do
post :vote_up
end
end
здесь, в post :vote_up
внутри члена, его method => :post
, а не пост-контроллер
но если вы решили использовать link_to
без :method => :post
что-то вроде этого
<%= link_to('vote for this post!', vote_up_post_path(@post)) %>
тогда ваша маршрутизация должна быть
resources :posts do
member do
get :vote_up
end
end
Надеюсь, это поможет!