我有一个视图助手文件app / helpers / analysis_helper.rb,我在各种视图文件中使用的顶级方法。工作良好。然后我在analyze_helper.rb中定义了一个AnalysisSummary类来打包一些特定于视图的功能。
但是,当我尝试在视图文件中实例化AnalysisSummary时,我收到错误:
uninitialized constant ActionView::CompiledTemplates::AnalysisSummary
也许Rails告诉我,我不应该在帮助文件中定义一个类?如果是这样,你会在哪里建议停车分析共享?它不是控制器,它不是模型......
感谢。
答案 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)
这是一个模块然后:)绝对不要在帮助器中定义类。只需使用一个简单的模块即可完成工作。