Rails /在视图中使用模型

时间:2012-06-28 07:56:46

标签: ruby-on-rails ruby model views

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

我正在这样做:

  • 我的模特'用户'
  • 在我的控制器中,我设置了一个名为 @users = User.all
  • 的实例变量
  • 在我的观点中,我实现了这样的逻辑: <%= @users.each ... %>

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

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

4 个答案:

答案 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)

  • 模型:进行任何逻辑分析和数据维护的所有内容
  • 控制器:应该只分析请求并决定它应该以什么方式请求数据的模型(所有数据?只有一个字段?...还是:我是管理员还是不管理员?)
  • 查看:只是从控制器
  • 获取的数据的直观表示

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