我是 Ruby on Rails 的新手,我对自己的 MVC 逻辑没有信心。
我正在以这种方式进行:
- 我有一个模型“用户”
- 在我的控制器中,我设置了一个名为的实例变量
@users = User.all
- 在我看来,我这样实现我的逻辑:
<%= @users.each ... %>
我在问自己我可以绕过控制器步骤并在我的视图中写下这个:<%= User.all.each ... %>
我想在我的项目中使用良好的做法,第二种方式可以接受吗?
我是 Ruby on Rails 的新手,我对自己的 MVC 逻辑没有信心。
我正在以这种方式进行:
@users = User.all
<%= @users.each ... %>
我在问自己我可以绕过控制器步骤并在我的视图中写下这个:<%= User.all.each ... %>
我想在我的项目中使用良好的做法,第二种方式可以接受吗?
例如,在控制器中的实际操作比 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
所以,如果你想改变视图你改变视图
如果你想改变收集过程的行为你改变控制器
如果你想改变对象的行为你改变模型
相同的东西有虫子
都按严格
的顺序排列是好的和漂亮的
从技术上讲,您可以,您的 User 模型只是一个 Ruby 类,可以从您的视图中访问。但是,这绝对不是一个好习惯。
与其长篇大论地谈论为什么不应该这样做,我只会为您链接到一些文章/文档,并建议您先对 MVC 架构背后的推理有一个很好的了解,然后再进一步进入 Rails:
仅从控制器操作中与 ActiveRecord 的查询接口交互的想法是可维护性。如果您遵循该方法,您可以通过查看应用程序的控制器大致了解应用程序应该做什么。此外,如果逻辑变得更复杂(例如,您想要添加身份验证和/或授权),该行为将进入控制器。
相反,如果您查看其中一个视图,则应该清楚页面的外观。如果到处都有对模型类的调用,那就不太明显了。
或许,你可以这样想:
如果您想更改应用程序的某个方面,您只需触摸负责该方面的相应组件即可。
所以是的,可以将所有内容移动到查看(甚至是数据库请求),但这不是一个好主意,理想情况下你应该将它移动到控制器