这是我第一次尝试使用助手。我想提出一个相对较长的方法,我不断在我的视图中重用一个帮助器。
视图中的代码实例如下:
<%= @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
那么,我该如何实现呢?我哪里错了?我怎么能写得更好?我在这里以正确的方式接近帮手吗?我已经查阅了文档,我的理解就是它们的用途。
编辑:
所以我添加了Damien的答案,
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>
更新:Damien是救命稻草。他的回答是一种享受,帮助我理解。奖励
提前致谢
答案 0 :(得分:3)
你略微错过了一个基本概念。
@guide.date_starting.start_time_display
上面调用start_time_display
上的方法date_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) %>
答案 1 :(得分:0)
邮票宝石可能会做你想要的。