Где метод upvote принадлежит в Rails? - PullRequest
2 голосов
/ 30 ноября 2011

Пользователь нажимает кнопку, чтобы поднять голос. Это должно обновить @ item.upvotes.

Куда это денется? Вот варианты, о которых я подумал. Я не очень хорошо знаком с правильной компартментализацией и надеюсь также выяснить причины этого.

  1. Модель - как метод экземпляра, который обновляется немедленно
  2. Контроллер - как метод, который вызывается с использованием маршрутизации. Если это так, почему мы делаем это вместо создания метода экземпляра для модели?
  3. Помощник - я не слишком знаком с тем, что они делают, но я знаю, что их можно вызвать с точки зрения. Тем не менее, они кажутся лучше для таких вещей, как манипуляции со строками или работа с вещами, которые принадлежат представлению.

Ответы [ 2 ]

3 голосов
/ 30 ноября 2011

Правильный способ состоит в том, чтобы кнопка upvote (просмотр) вызывала контроллер, перенаправляя к правильному методу.Внутри метода контроллера вы указываете модели обновить поле.Это принцип MVC.

Модель в Rails обычно содержит проверки, отношения и тому подобное.Обновление поля - это, очевидно, работа для контроллера.

Я уже не так хорошо владею своим рубином, поскольку сейчас я использую Java, но контроллер, вероятно, должен выглядеть примерно так:

class ItemsController
  def upvote
    Items.increment_counter(:upvote, params[:id])
  end

В представлении у вас есть кнопка где-нибудь (через форму или link_to), которая отправляет идентификатор, чтобы сказать действие "/ upvote":

<%= link_to "upvote", upvote_path(:id => @item.id) %>

В вашем файле маршрутов вы отправляете это в Items #upvote.

match "/upvote" => "items#upvote"
0 голосов
/ 30 ноября 2011

Проверка счетчика кеша:

http://railscasts.com/episodes/23-counter-cache-column

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