我试图为给定的模型名称数组动态生成一些计数方法,然后我可以在视图/助手中使用这些方法:
# 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不过,我有几个问题:
如果我想要在视图中调用这些方法,那么
发布于 2011-06-08 17:20:39
您要解决的问题(不让视图命中模型方法)并不是通过将相同的逻辑委托给视图助手来解决的。如果您想要坚持MVC惯例,防止视图触发SQL查询,那么您应该在控制器中这样做。
def index
models = Foo, Bar, Bat
@counts = models.inject({}) do |result, model|
result[model.name.downcase.to_sym] = model.count
result
end
end然后,您可以很好地散列所传递的每个模型的计数:
@counts #=> { :foo => 3, :bar => 59, :bat => 42 }发布于 2011-06-08 13:57:17
您应该使用混合器,并将其包含在相关的模型类中。http://juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/
这些方法可以在视图中的模型实例上使用。
https://stackoverflow.com/questions/6279673
复制相似问题