一个upvote方法在Rails中属于哪里?

时间:2011-11-30 06:48:49

标签: ruby-on-rails

用户单击按钮即可投票。这应该更新@ item.upvotes。

这是怎么回事?以下是我想到的选项。我对正确的划分并不是非常熟悉,我也希望能够了解这背后的原因。

  1. 模型 - 作为立即更新的实例方法
  2. 控制器 - 作为使用路由调用的方法。如果是这种情况,为什么我们这样做而不是在模型上创建实例方法?
  3. 帮助者 - 我不太熟悉这些做法,但我知道可以从视图中调用它们。但是,对于字符串操作或使用视图中的内容来处理它们似乎更好。

2 个答案:

答案 0 :(得分:3)

正确的方法是让upvote按钮(视图)通过路由到正确的方法来调用控制器。在控制器方法中,您告诉模型更新字段。这是MVC原则。

Rails中的模型通常只包含验证,关系等。更新字段显然是控制器的工作。

我现在不再使用我的ruby了,因为我现在正在使用java,但控制器应该看起来像这样:

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

在视图中,您有一个按钮(通过表单或link_to)发布id以表示“/ upvote”操作:

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

在您的路线文件中,您将其发送到Items#upvote。

match "/upvote" => "items#upvote"

答案 1 :(得分:-2)