首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby / Rails元编程:动态生成助手方法

Ruby / Rails元编程:动态生成助手方法
EN

Stack Overflow用户
提问于 2011-06-08 13:43:50
回答 2查看 632关注 0票数 2

我试图为给定的模型名称数组动态生成一些计数方法,然后我可以在视图/助手中使用这些方法:

代码语言:javascript
复制
  # create dynamic count methods for each model we want                   
  ['model', 'other_model', 'next_model'].each do |name|
     class_eval{
       "def total_#{name.underscore}s_count
          total_#{name.underscore}s_count ||= #{name.camelcase}.all.count
        end"
      }
  end

不过,我有几个问题:

如果我想要在视图中调用这些方法,那么

  1. 该将这些代码转到哪里?
  2. 将向哪些类添加这些方法?例如,我如何调用它们,因为我不确定它们是否属于用户等类,因为它们属于一堆模型。
  3. 有更好的方法吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-08 17:20:39

您要解决的问题(不让视图命中模型方法)并不是通过将相同的逻辑委托给视图助手来解决的。如果您想要坚持MVC惯例,防止视图触发SQL查询,那么您应该在控制器中这样做。

代码语言:javascript
复制
def index
  models = Foo, Bar, Bat
  @counts = models.inject({}) do |result, model|
    result[model.name.downcase.to_sym] = model.count
    result
  end
end

然后,您可以很好地散列所传递的每个模型的计数:

代码语言:javascript
复制
@counts #=> { :foo => 3, :bar => 59, :bat => 42 }
票数 1
EN

Stack Overflow用户

发布于 2011-06-08 13:57:17

您应该使用混合器,并将其包含在相关的模型类中。http://juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/

这些方法可以在视图中的模型实例上使用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6279673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档