Разъяснение о том, как использовать жемчужину голосования thumbs_up с Rails 3 - PullRequest
11 голосов
/ 05 февраля 2011

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

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

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

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

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

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

Ответы [ 3 ]

24 голосов
/ 11 февраля 2011

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

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

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

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
1 голос
/ 15 февраля 2013

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

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

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

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

<%= link_to('vote for this post!',
    vote_up_micropost_path(@microposts),
    :method => :post) %>
0 голосов
/ 14 марта 2012

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

Брэди имел следующий код в своем представлении

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

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

U может использовать <% = 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

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

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