2014-07-06 13 views
1

这是我第一次尝试使用助手。我想把一个相对较长的方法,在我的观点中不断重复用于帮手。使用助手来缩短strftime在轨道上

视图代码的实例是在这里:

<%= @guide.date_starting.strftime("%B #{@guide.date_starting.day.ordinalize}") %> to 
<%= @guide.date_ending.strftime("%B #{@guide.date_ending.day.ordinalize}") %> 

所以我试图做的是在模块助手写:

def start_time_display 
     self.strftime("%B #{@guide.date_starting.day.ordinalize}") 
    end 

    def end_time_display 
     self.strftime("%B #{@guide.date_ending.day.ordinalize}") 
    end 

,然后写在意见

<%= @guide.date_starting.start_time_display %> to <%= @guide.date_ending.end_time_display %> 

这给了我这个错误:

undefined method `start_time_display' for Wed, 03 Sep 2014 00:00:00 UTC +00:00:Time 

那么,我该如何做到这一点?我哪里错了?我怎么能写得更好?我在这里以正确的方式接近助手吗?我咨询了文档,我的理解是这是他们在那里。

编辑:

所以我说达明的回答,

View.html.erb

引导帮手

def time_display(datetime) 
    strftime("%B #{datetime.day.ordinalize}") 
end 


def time_display_span(start, end_date) 
    time_display(start) + " to " + time_display(end_date) 
end 

错误...

undefined method `strftime' for #<#<Class:0x000001088c0128>:0x000001088cb168> 

更新:达米安是一位救生员。他的回答很有帮助,并帮助我理解。荣誉

在此先感谢

+0

@EgeErsoz这是在正确的帮手,我读了很多.. –

回答

3

你已经略微错过了一个基本概念。

@guide.date_starting.start_time_display 

上面调用方法start_time_displaydate_starting,这是一个DateTime实例。与date_starting@guide上的方法相同。

视图助手就像全局函数,所以你会在你的@guide.date_starting作为参数传递:

def time_display(datetime) 
    datetime.strftime("%B #{datetime.day.ordinalize}") 
end 

def time_display_span(start_date, end_date) 
    time_display(start_date) + " to " + time_display(end_date) 
end 

注:我使用了一个通用的time_display,因为你可以在date_starting/date_ending作为参数传递。我还添加了一个time_display_span这将进一步简化您的观点:

<%= time_display_span(@guide.date_starting, @guide.date_ending) %> 
+0

更好的答案。删除我的。 –

+0

@Justin无后顾之忧,谢谢:) –

+0

@DamienRoche好吧,我想我得到你,但你的方法给了我这个错误意想不到的关键字_dend def time_display_span(开始,结束)^/Users/Fred/projects/artsmill/artsmill/app /帮助程序/ guides_helper.rb:8:语法错误,意外的关键字结束,期待')'time_display(开始)+“到”+ time_display(结束)^ –