2

我是 Ruby on Rails 的新手,我对自己的 MVC 逻辑没有信心。

我正在以这种方式进行:

  • 我有一个模型“用户”
  • 在我的控制器中,我设置了一个名为的实例变量@users = User.all
  • 在我看来,我这样实现我的逻辑:<%= @users.each ... %>

我在问自己我可以绕过控制器步骤并在我的视图中写下这个:<%= User.all.each ... %>

我想在我的项目中使用良好的做法,第二种方式可以接受吗?

4

4 回答 4

1

例如,在控制器中的实际操作比 User.all.each 更复杂

@cars = Car.scoped
@cars = @cars.includes(:body_type, :brand, :city, :drive, :engine_type, :model, :region, :transmission)
@cars = @cars.select(['`cars`.*','`stats`.recount']).joins('left outer join stats on (cars.model_id = stats.model_id and cars.year = stats.year)')
@cars = @cars.limit(15)

和模式和更多其他逻辑

在视图中,您只需要
在我的示例中渲染此对象,我在视图中使用渲染部分

= render @cars

并在视图/_car.html.haml

- for car in @cars
  .row-fluid.car
    = car.price
    = etc

所以,如果你想改变视图你改变视图
如果你想改变收集过程的行为你改变控制器
如果你想改变对象的行为你改变模型

相同的东西有虫子
都按严格
的顺序排列是好的和漂亮的

于 2012-06-28T08:25:53.347 回答
0

从技术上讲,您可以,您的 User 模型只是一个 Ruby 类,可以从您的视图中访问。但是,这绝对不是一个好习惯。

与其长篇大论地谈论为什么不应该这样做,我只会为您链接到一些文章/文档,并建议您先对 MVC 架构背后的推理有一个很好的了解,然后再进一步进入 Rails:

于 2012-06-28T08:12:20.380 回答
0

仅从控制器操作中与 ActiveRecord 的查询接口交互的想法是可维护性。如果您遵循该方法,您可以通过查看应用程序的控制器大致了解应用程序应该做什么。此外,如果逻辑变得更复杂(例如,您想要添加身份验证和/或授权),该行为将进入控制器。

相反,如果您查看其中一个视图,则应该清楚页面的外观。如果到处都有对模型类的调用,那就不太明显了。

或许,你可以这样想:

  • 模型:复杂的查询、验证、回调以服务于您的业务逻辑
  • 控制器:正在显示/创建/更新/等的内容。谁被允许这样做。
  • 视图:我的页面在视觉上如何

如果您想更改应用程序的某个方面,您只需触摸负责该方面的相应组件即可。

于 2012-06-28T08:12:51.697 回答
0
  • 模型:进行任何类型的逻辑分析和数据维护的一切
  • 控制器:应该只分析请求并决定它应该以什么方式请求数据的模型(所有数据?只有一个字段?...另外:我是管理员吗?)
  • 视图:只是从控制器获取的数据的可视化表示

所以是的,可以将所有内容移动到查看(甚至是数据库请求),但这不是一个好主意,理想情况下你应该将它移动到控制器

于 2012-06-28T08:25:06.340 回答