1

我目前正在阅读 Hartl 的 Rails 教程,并且通过前 10 章左右已经习惯了将大部分动作/方法放在控制器中的约定。目前,由于本书正在为 Microposts定义一个feed方法,该方法被放置在User.rb 模型中。由于我对 Rails 世界(以及一般编程)相对较新,我想知道将这种方法(复制如下)放入模型中的基本原理或约定是什么?

模型中放置的方法User.rb

  def feed
    # This is preliminary. See "Following users" for the full implementation.
    Micropost.where("user_id = ?", id)
  end
4

2 回答 2

2

实际上,关于将什么代码放在哪里存在相当多的争论,但总的来说,有一些简单的指导方针可以遵循。

该方法是否必须了解有关底层数据结构的一些细节?将其放入模型中。

确定这一点的一种简单方法是使用 ActiveRecord 方法,例如数据库中的 find、where 或特定列。通过将此逻辑保留在模型中,这意味着如果您需要更改底层数据存储,您只需更改模型。

该方法是否对如何呈现页面有发言权?将其放入控制器中。

一般来说,控制器应该很薄,将数据推送到视图并将表单数据保存回模型。

虽然(如果我没记错的话)Hartl 不考虑非 Rails 类,但不要害怕将“业务逻辑”放在 Rails 结构之外。您可以创建一个 app/lib 或 app/services 或 app/x 目录并将普通的旧 ruby​​ 对象放入其中,然后可以从您的控制器和模型中调用它们来处理它们擅长的事情。

于 2012-12-28T02:18:27.793 回答
2

旨在尽可能地将事物“推”到模型中,然后它们将被更少重复并可供更多人使用。不要只对 Active Record 数据库表使用模型。

您通常可以更轻松地对模型进行单元测试。

另一个放置共享内容的“下一个”地方是/lib

于 2012-12-28T03:02:17.133 回答