1

假设我有一个名为 Books 的控制器(以及相应的 Book 模型)和一个名为 Users 的控制器(以及相应的 User 模型)。这些控制器中的每一个都具有标准的 CRUD 操作,它们也充当我网站 API 的工具。

我网站上的大多数页面都很容易适应这个框架。例如,看一本书。或查看您的用户帐户。或编辑您的用户帐户。等等。

但是假设我有一个有点独特的索引:我想显示一个用户列表和一个书籍列表。这提出了几个问题:

  • 这应该放在哪个控制器下:UsersController、BooksController 或新控制器?
  • 如果我创建一个新控制器,是否会被视为违反任何 MVC 原则,因为它不会特别绑定到任何特定模型?
  • 这个新的控制器操作将如何检索数据?如果我在其中编写新的 ActiveRecord 查询,我会重复自己,因为我的其他控制器中已经有这样的代码。如果可能的话,我也更喜欢使用我自己的 API。
4

2 回答 2

1

您可以在模型中使用范围(谷歌搜索)来保持控制器的精简。根据您要展示的内容,您可以创建新的方法和视图。假设您有一个用户仪表板,其中列出了您的书籍和不同模型中的作者。

您可以在用户控制器中创建一个名为 def dashboard 的新方法,因为它与您的用户相关。

def dashboard

end 

您将在模型中创建一个辅助方法来确定特定查询的范围。请记住还要将正确的路线添加到您的路线文件中。

我希望这有帮助

于 2013-02-09T04:21:08.547 回答
0

随便你。

1)我可能会编写另一个控制器,尽管它最终可能是一个品味问题,并且它可能会随着应用程序的上下文而改变。

2)我会从两个模型中获取数据。没有一对一的 MVC 规则映射控制器和模型。

我不太清楚您所说的“查询”是什么意思,但您可以将它们放在模型方法(或范围)中以避免 DRY。当然,人们很想在控制器中进行简单的查询,因为 ActiveRecord 将它们封装为方法(例如 User.find(n) )

于 2013-02-09T04:29:08.793 回答