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