Ruby on rails 我应该从MVC应用程序的视图中迭代业务对象吗?

Ruby on rails 我应该从MVC应用程序的视图中迭代业务对象吗?,ruby-on-rails,ruby,model-view-controller,Ruby On Rails,Ruby,Model View Controller,我想知道在使用MVC框架时,我应该在一个视图中访问多少数据。 例如:在我的应用程序中,有一个页面显示了我最喜欢的所有艺术家的列表,以及每个艺术家的所有歌曲列表。 问题是:我应该只向视图传递艺术家列表,还是同时传递所有数据(艺术家+歌曲) Ps:我正在使用Ruby On Rails和ActiveRecord。假设Artist的模型类能够提供一组歌曲,我认为没有理由要求控制器明确地将这两个都传递到视图。假设Artist的模型类能够提供一组歌曲,我认为没有理由要求控制器提供歌曲明确地将两者都传递给视图

我想知道在使用MVC框架时,我应该在一个视图中访问多少数据。 例如:在我的应用程序中,有一个页面显示了我最喜欢的所有艺术家的列表,以及每个艺术家的所有歌曲列表。 问题是:我应该只向视图传递艺术家列表,还是同时传递所有数据(艺术家+歌曲)


Ps:我正在使用Ruby On Rails和ActiveRecord。

假设Artist的模型类能够提供一组歌曲,我认为没有理由要求控制器明确地将这两个都传递到视图。

假设Artist的模型类能够提供一组歌曲,我认为没有理由要求控制器提供歌曲明确地将两者都传递给视图。

不要在视图中提取db数据-这是控制器的工作。在视图中,应仅引用控制器方法加载的数据

在您的情况下,这意味着创建艺术家列表,使用
:include
,以便预先加载歌曲

# In your controller
@artists = Artist.find(:all, :include => :songs)
编辑针对method的评论,从视图中提取数据存在两个问题:

  • 关注点分离。这就是我说的,当我说你“应该”只拉控制器中的数据时——在MVC中,控制器处理数据访问,理论上,视图不包含逻辑。有时在视图中放置一些数据检索当然更容易,但很快就会变得难看
  • 效率,无论是查询数量还是查询结果大小,我认为这就是该方法所讨论的。如果您在一个页面中加载了足够多的数据,这就成了一个问题,我想知道这是否意味着需要进行重构(或者至少分页)

    • 不要在视图中提取db数据-这是控制器的工作。在视图中,应仅引用控制器方法加载的数据

      在您的情况下,这意味着创建艺术家列表,使用
      :include
      ,以便预先加载歌曲

      # In your controller
      @artists = Artist.find(:all, :include => :songs)
      
      编辑针对method的评论,从视图中提取数据存在两个问题:

      • 关注点分离。这就是我说的,当我说你“应该”只拉控制器中的数据时——在MVC中,控制器处理数据访问,理论上,视图不包含逻辑。有时在视图中放置一些数据检索当然更容易,但很快就会变得难看
      • 效率,无论是查询数量还是查询结果大小,我认为这就是该方法所讨论的。如果您在一个页面中加载了足够多的数据,这就成了一个问题,我想知道这是否意味着需要进行重构(或者至少分页)

      这真的重要吗?为什么不呢,尤其是如果有条件逻辑意味着这些歌曲根本不会被请求。不过,我可能不理解所涉及的问题。我认为AR做了延迟加载,检索更少的记录比检索更少的查询更有效。这真的重要吗?为什么不呢,尤其是如果有条件逻辑意味着这些歌曲根本不会被请求。不过,我可能不理解所涉及的问题。我认为AR进行了延迟加载,检索更少的记录比检索更少的查询更有效。