gpt4 book ai didi

ruby-on-rails - 使用助手来缩短 Rails 中的 strftime

转载 作者:太空宇宙 更新时间:2023-11-03 18:16:57 24 4
gpt4 key购买 nike

这是我第一次尝试使用助手。我想把我在 View 中重复使用的一个相对较长的方法放到一个帮助程序中。

View 中的代码实例如下:

<%= @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

然后在views里面写这个

<%= @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 是救命恩人。他的回答很有用,帮助我理解了。荣誉

提前致谢

最佳答案

您略微忽略了一个基本概念。

@guide.date_starting.start_time_display

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

View helpers 就像全局函数,因此您可以将 @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,这将进一步简化您的 View :

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

关于ruby-on-rails - 使用助手来缩短 Rails 中的 strftime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24600969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com