【问题标题】:using helpers to shorten strftime in rails使用助手来缩短 rails 中的 strftime
【发布时间】:2014-07-06 22:39:57
【问题描述】:

这是我第一次尝试使用助手。我想将我在视图中不断重复使用的相对较长的方法放入帮助程序中。

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

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

更新:达米安是救生员。他的回答很有效,帮助我理解。赞一个

提前致谢

【问题讨论】:

  • @EgeErsoz 它是在正确的助手中,我读了那么多..

标签: ruby-on-rails ruby view-helpers


【解决方案1】:

您略微遗漏了一个基本概念。

@guide.date_starting.start_time_display

上面调用date_starting上的方法start_time_display,这是一个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) %>

【讨论】:

  • 更好的答案。删除我的。
  • @DamienRoche 好的,我想我明白了,但你的方法给了我这个错误意想不到的关键字_end def time_display_span(start, end) ^ /Users/Fred/projects/artsmill/artsmill/app/helpers/guides_helper .rb:8:语法错误,意外keyword_end,期待')' time_display(start) + " to " + time_display(end) ^
  • @rico_mac end 是保留关键字。不要养成复制粘贴答案的习惯;)改用end_date。不过,我会更新我的答案。
  • 谢谢@DamienRoche,我知道,一位智者曾告诉我,我应该多听听。但是我已经对其进行了调整,但仍在努力查看错误,请参阅更新
  • @rico_mac 那么我不太确定。您能否发送这些方法的完整定义(使用 paste.org 或其他东西)?我更新的答案中的语法应该没问题。
【解决方案2】:

邮票宝石可以做你想做的事。

https://github.com/jeremyw/stamp

【讨论】:

    猜你喜欢
    • 2015-09-16
    • 1970-01-01
    • 2020-01-16
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多