Более RESTful переработкой является определение каждого из ваших действий в качестве отдельного маршрута, ПОЛУЧИТЕ, если вам нужно, в идеале POST, чтобы получить каждый из этих типов вызовов:
before_filter :load_micropost
def load_micropost
@micropost = Micropost.find(params[:id])
end
def upvote
@micropost.increment!(:votes)
flash[:success] = "Increase micropost vote"
redirect_to root_path
end
def downvote
@micropost.decrement!(:votes)
flash[:success] = "Decrease micropost vote"
redirect_to root_path
end
Не забудьтесоздать методы типа load_micropost
для обработки рутинной загрузки моделей.Нет никакого смысла в том, чтобы использовать несколько различных вызовов для вашего метода, которые в будущем могут потребовать корректировки.
Вы бы перенаправили их так:
map.resources :microposts,
:member => {
:upvote => :post,
:downvote => :post
}
Другая вещьВы можете рассмотреть вопрос о добавлении таблицы, в которой записывается, кто за что проголосовал, чтобы вы могли проводить аудит и корректировать при необходимости.Это позволяет легко отменить любое мошенническое действие без необходимости сбрасывать голоса оптом.
Вы также можете сделать простые ссылки, которые POST, если вы их попросите:
<%= link_to('Upvote', upvote_micropost_path(feed_item), :method => :post) %>
Это позаботитсяотрисовки любых необходимых элементов формы.