Разъяснение о том, как использовать жемчужину голосования thumbs_up с Rails 3

Я пытаюсь реализовать жемчужину голосования thumbs_up в приложении на Rails 3, однако инструкции по реализации неясны. После запроса гема [ gem 'thumbs_up' ] и после создания и запуска соответствующей миграции [ rails generate thumbs_up && rake db: migrate ] README объясняет следующее:

Чтобы проголосовать за модель, вы можете сделать следующее:
* Сокращенный синтаксис
voter.vote_for(с правом голоса) # Добавляет +1 голос
voter.vote_against(для голосования) # Добавляет -1 голос
voter.vote(голосования, голосования) # Добавляет либо +1, либо -1 голос: голос => верно (+1), голос = = ложь (-1)

voter.vote_exclusively_for (voiceable) # Удаляет все предыдущие голоса данного избирателя и голосует за.
voter.vote_exclusively_against (для голосования) # Удаляет все предыдущие голоса данного избирателя и голосует против.*

Я предполагал, что использование "voter" и "voiceable" в примере README является заменой для объектов в приложении, но использование для меня все еще неясно.

Буквальный пример того, как должен выглядеть мой файл view, controller и rout.rb, - это ПОМОЩЬ. Я провел дни, пытаясь понять это!

В моем приложении есть пользователи, которые голосуют за сообщения, которые бывают двух типов - события и ссылки. Посты вызываются с использованием <% = render: частичный => @posts %>, и каждый отдельный пост использует в качестве своего представления " _event.html.erb " или " _link.html.erb " - в зависимости от того, является ли это событие или ссылка.

3 ответа

Надеюсь, я смогу вам немного помочь.

Генераторы должны были создать модель голосования для вас. Это модель, которая удерживает все голоса, но вы косвенно взаимодействуете с помощью методов, описанных выше.

Итак, для вас:

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

Ошибка маршрутизации

Не найдено ни одного маршрута {:action=>"voice_up",:controller=>"microposts",:id=>nil}

это ссылка, которую я использую, и предположим, что именно здесь маршрутизация указана неправильно. Я запустил рейковые маршруты, и есть маршрут с именем voice_up_micropost. Есть что-нибудь еще, что я должен изучить. Спасибо

вот ссылка, которую я добавил

<%= link_to('vote for this post!',
    vote_up_micropost_path(@microposts),
    :method => :post) %>

Это просто продолжение ответа Брейди.

У Брэди был следующий код по его мнению

<%= link_to('vote for this post!', vote_up_post_path(@post), :method => :post) %>

что он имеет в виду.. так как по умолчанию link_to использует :method => 'get' И он хотел обновить запись, используя сообщение и не получить, поэтому он использует :method => 'post'

Вы можете использовать <% = button_to ('голосуйте за это сообщение!', Voice_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

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

Другие вопросы по тегам