从自定义视图Rails调用帮助器方法

时间:2013-08-29 21:24:24

标签: ruby-on-rails delayed-job helper

在ApplicationHelper中,我有一个名为finTime的方法。

def finTime(time)
end

在delayed_job中我有render_to_string函数

class ExportJob < Struct.new(:time1,:time2, :survey_id)
   def perform
       ac = ActionController::Base.new()
   html = ac.render_to_string(:template => "pages/exportPdf.html.erb",:layout =>    "layouts/exportPdf",:formats => :html
   end
end

在exportPdf.html.erb中我调用函数finTime

<%= finTime(f.created_at) %>

我收到错误:“ActionView :: Template:Error:undefined method'finTime'for#&lt; #Class:0x6db8eb0&gt;:0x8321928&gt;”

所以我想问一下如何在这种情况下从exportPdf.html.erb调用finTime方法。我尝试使用include和helper,但它不起作用。 谢谢!

1 个答案:

答案 0 :(得分:0)

这里没有太多的信息,但有一种可能性就是你的定义中没有任何论据 - 它只是finTime

但是在通话中你会给出一个f.created_at的参数 - 也许这会导致错误,也许不会。什么是完整的错误?

相关,方法名称的一般做法是蛇案例,因此finTime应为fin_time

编辑:如果没有看到更多代码,那仍然很难,例如

<%= finTime(f.created_at) %>

这是你的代码中的内容吗? finTime()是一种方法,因此必须在模型上调用 - model.finTime(time)

这一行还缺少一个末端括号:

html = ac.render_to_string(:template => "pages/exportPdf.html.erb",:layout =>    "layouts/exportPdf",:formats => :html

如果这两件事只是您问题中的问题而不是代码中的问题,请尝试将finTime()替换为部分中的inspectmethods,看看会发生什么。如果还有错误,你就会知道你必须在其他地方寻找,如果没有,你会得到一些可能有助于你解决问题的信息。祝你好运!