【问题标题】:Printing model count in view (MVC)打印视图中的模型计数 (MVC)
【发布时间】:2015-11-01 23:42:41
【问题描述】:

我想在我的网站前面放一些统计数据,例如:

# jobs/index.html.haml
.panel
    .panel-heading
        %h4 Statistics
    .panel-body
        .col-md-9.col-xs-9
            %h5.pull-left Users
        .col-md-3.col-xs-3
            %h5.pull-right= @usercount

        .col-md-9.col-xs-9
            %h5.pull-left Companies
        .col-md-3.col-xs-3
            %h5.pull-right= @companycount

        .col-md-9.col-xs-9
            %h5.pull-left Categories
        .col-md-3.col-xs-3
            %h5.pull-right= @categorycount

        .col-md-9.col-xs-9
            %h5.pull-left Total offers gathered
        .col-md-3.col-xs-3
            %h5.pull-right= @jobcount

目前这些变量都设置在控制器中:

# controller: jobs, action: index
@jobcount = Job.count
@usercount = User.count
@categorycount = Category.count
@companycount = Job.distinct.count('company')

但我认为这是在 MVC 中执行此操作的最糟糕的方式。谁能告诉我应该怎么做?

【问题讨论】:

  • 在模型视图上使用 draper gem 进行装饰,请参阅github.com/drapergem/draper
  • railscasts.com/episodes/286-draper 一个很好的导轨浇铸在布料上
  • 好吧,我知道您对违反 REST 逻辑感到难过,但如果您需要在工作索引中添加其他数据,只需加载它... :)
  • 是的,我觉得我这样做完全违反了 MVC 规则,这就是为什么我想学习如何加载这样的数据的最佳实践,兄弟
  • 这是一个统计视图,您可能可以创建一个数据库视图,或者一次返回所有这些统计数据的数据库函数。

标签: ruby-on-rails ruby model-view-controller


【解决方案1】:

我会采用这种风格: @statistics = { job_count: Job.count, user_count: User.count, category_count: Category.count, company_count: Job.distinct.count('company') }

【讨论】:

  • 现在我只有一个变量,好吧,但恐怕这仍然不是将数据从任何模型导入到一个特定控制器的最佳做法,你不这么认为吗?跨度>
  • 这取决于,如果您只需要这些信息,为什么还要为此创建另一个对象?只需加载它!
  • 其实我觉得你的方法最好,我问了更多的人,这不像违反MVC规则,同时生成装饰器对于这个目的来说太多了。感谢您的意见,@Frozenna!
【解决方案2】:

如果我们以the rails style guide 作为参考,它表示我们应该避免使用sharing more than two instance variables in a controller。

绕过装饰器的方法(如 cmets 中所述)。提供此类功能的流行库是 draper 或只是您自己编写的一些普通 ruby​​ 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2014-08-28
    • 2014-01-07
    相关资源
    最近更新 更多