RoR:在视图助手文件中定义一个类

时间:2011-03-03 01:49:13

标签: ruby-on-rails ruby-on-rails-3 helpers

我有一个视图助手文件app / helpers / analysis_helper.rb,我在各种视图文件中使用的顶级方法。工作良好。然后我在analyze_helper.rb中定义了一个AnalysisSummary类来打包一些特定于视图的功能。

但是,当我尝试在视图文件中实例化AnalysisSummary时,我收到错误:

uninitialized constant ActionView::CompiledTemplates::AnalysisSummary

也许Rails告诉我,我不应该在帮助文件中定义一个类?如果是这样,你会在哪里建议停车分析共享?它不是控制器,它不是模型......

感谢。

4 个答案:

答案 0 :(得分:6)

Railscasts #213 (Revised)(订阅者只链接,唉)中,Ryan Bates提供了一个示例,说明如何(以及为什么)在帮助程序中包含一个类。基本要点是:

# app/helpers/calendar_helper.rb
module CalendarHelper
  def calendar(date = Date.today)
    Calendar.new(self, date).render
  end

  class Calendar
    def render
      # Calendar, render thyself
    end
    # ... additional methods called by #render
  end
end

对于那些反对帮助者中的课程的人,您对Ryan的选择有何看法?助手是为了产生标记,对吧?因此,如果类中的所有逻辑都与渲染(相当复杂)的HTML相关,我会认为所做的(而不是 )使它适合包含在帮手。

答案 1 :(得分:1)

为什么需要上课?为什么不只是一组方法?这就是帮助者:一系列有用的方法。业务逻辑不属于帮助者。但是,如果要提供更多结构和组织,可以将代码放在帮助文件中的模块中。

您可以将课程放在app/models中,而不必将其作为ActiveRecord课程,但在将课程放在那里之前,您应该认真考虑课程的目的。

如果仅涉及呈现视图,而不是直接访问数据,则它属于视图或视图助手。

答案 2 :(得分:1)

您可以通过明确提及帮助名称

来调用该类
ApplicationHelper::AnalysisSummary.new

但我不认为在帮助者中上课是个好主意。

答案 3 :(得分:0)

这是一个模块然后:)绝对不要在帮助器中定义类。只需使用一个简单的模块即可完成工作。