Разъяснение того, как использовать "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

Надеюсь, это поможет!