要使用Model作为资源吗?

时间:2009-10-26 14:46:38

标签: ruby-on-rails ruby rest

所以我有一个用户发布投票模型。

User has_many Vote
Post has_many Vote

在我的单元测试中,我定义了一个名为 @ post.vote_up 的方法,该方法为帖子创建了一个投票,但后来我开始考虑这样的接口是否允许采用其他方法。< / p>

如果我使用POST调用/ topic / 1 / vote,则会调用 VoteController 创建操作。

在那个控制器中调用像 @ post.vote_up 那样具体的东西不是很糟糕吗?

我应该简单地在PostController中创建一个名为vote_up的成员动作,并忘记使用Vote作为资源吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

在这种情况下,你总是需要问自己:

此操作在此应用程序的上下文之外是否有意义。

如果确实如此,那么它属于模型。否则它属于控制器。投票是一个概念,它确实存在于你的应用程序的上下文之外,因此它的逻辑应保留在模型中。

我认为发布到/ topic / 1 /投票来创建投票听起来很合理,而且是大多数人会做的。

另一种方法是允许对/ topic / 1 / votes / username(或其中某些变体)的PUT请求。这可能比帖子更具说服力,应该遵循PUT的HTTP规范。您当然需要根据URL中的用户名验证登录的用户名。