如何保持我的Rails控制器DRY并使用我自己的API?

时间:2013-02-09 01:42:38

标签: ruby-on-rails model-view-controller dry rails-activerecord

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

我网站上的大多数网页都很容易融入此框架。例如,查看书籍。或者查看您的用户帐户。或者修改您的用户帐户。等

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

  • 应该使用什么控制器:UsersController,BooksController或新控制器?
  • 如果我创建一个新的控制器,那么它是否被认为违反了任何MVC原则,因为它不会特别依赖于任何特定的模型?
  • 这个新控制器操作如何检索数据?如果我在里面写了新的ActiveRecord查询,那我就重复自己,因为我已经在其他控制器中有这样的代码了。如果可能的话,我也更喜欢使用自己的API。

2 个答案:

答案 0 :(得分:1)

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

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

def dashboard

end 

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

我希望这会有所帮助

答案 1 :(得分:0)

无论你想要什么。

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

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

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