我目前正在阅读Hartl的Rails教程,并且通过前10章左右已经习惯了将大多数动作/方法放入控制器的惯例。目前,正如本书正在进行并且defining a feed
method用于Microposts,该方法与User.rb
模型一起放置。由于我对rails(以及一般编程)的世界相对较新,我想知道将这种方法(下面复制)放在模型中的原理或惯例是什么?
放置在User.rb
模型中的方法:
def feed
# This is preliminary. See "Following users" for the full implementation.
Micropost.where("user_id = ?", id)
end
答案 0 :(得分:2)
实际上,在哪些代码放在哪里存在争议,但总的来说,有一些简单的指导方针可供遵循。
该方法是否必须了解有关基础数据结构的一些细节?把它放在模型中。
确定这一点的一种简单方法是使用ActiveRecord方法,例如数据库中的find,where或特定列。通过在模型中保留此逻辑,这意味着如果您需要更改基础数据存储区,则只需更改模型。
该方法对页面的呈现方式有一定的说法吗?把它放在控制器中。
通常,控制器应该非常薄,将数据推送到视图并将表单数据保存回模型。
虽然(如果我没记错的话)Hartl不会考虑非rails类,不要害怕将“业务逻辑”放在rails结构之外。您可以创建一个app / lib或app / services或app / x目录,并在其中放置普通的旧ruby对象,然后可以从控制器和模型中调用它们来处理他们擅长的事情。
答案 1 :(得分:2)
旨在尽可能地将“推动”事物“推进”到模型中,然后它们将重复次数减少并且更多可用。不要只使用Active Record数据库表的模型。
您通常可以更轻松地对模型进行单元测试。
放置共享内容的另一个“下一个”位置是/lib