【问题标题】:Rails Format Date in Drop Down List in ViewRails 在视图中的下拉列表中格式化日期
【发布时间】:2013-03-21 04:46:42
【问题描述】:

我可以帮助您在视图中的下拉列表中格式化日期字段。我的日期显示带有时间戳,我希望它们显示为“mm/dd/yyyy”。

在我的模型中,我有一个从表中选择日期字段的方法:

def self.get_event_dates
  event_dates = UgradRsvp.find_by_sql("select distinct event_date from admissions.ugrad_rsvps where event_date is not null order by event_date desc")
end 

我们使用 Oracle 作为我们的数据库,所以我也尝试使用 to_char(event_date, 'MM/DD/YYYY') 作为 event_date,但我的下拉列表中的日期仍然显示时间戳。

我的视图是一个搜索表单。用户将选择一个日期,然后查看在该 event_date 报名参加活动的所有学生的报告:

<%= select_tag "event_date", options_from_collection_for_select(UgradRsvp.get_event_dates, "event_date", "event_date") %>

我的表 ugrad_rsvps 中有大约八个日期。它们显示为,即:“2013-04-18 00:00:00 -0400”我想让它们显示为“04/18/2013”​​。我尝试过使用 strftime("%m/%d/%Y"),但我只是在我的视图中的下拉菜单(上图)中看到错误。

有什么想法吗?谢谢,

【问题讨论】:

    标签: ruby-on-rails select tags


    【解决方案1】:

    在您的模型中添加以下方法

      def event_date_formatted
        event_date.strftime("%m/%d/%Y")
      end
    

    那么你可以像这样简单地使用:

    <%= select_tag "event_date", options_from_collection_for_select(UgradRsvp.get_event_dates, 'event_date', :event_date_formatted) %>
    

    【讨论】:

    • 太棒了,路易斯。谢谢你。我应该自己意识到这一点。谢谢,谢谢,谢谢!
    • 没问题,很高兴能帮助你,约翰!
    • 这是一个很好的答案,但我在 options_for_select 的文档中找不到任何关于传递方法 (event_date_formatted) 的内容。我可以通过任何方法吗?
    • @Anh 上面的示例适用于options_from_collection_for_select。如果你检查源代码,你会看到它调用了私有方法value_for_collection,并将方法作为参数value 传递,然后它只是调用你传递的方法。
    【解决方案2】:

    我还没有尝试,但您可以尝试将方法添加到模型中

    class UgradRsvp < ActiveRecord::Base
        def event_date_text
            event_date.strftime("%d/%m/%Y")
        end
    end
    

    然后调用 event_date_text 作为 txt_method

    <%= select_tag "event_date", options_from_collection_for_select(UgradRsvp.get_event_dates, "event_date", "event_date_text") %>
    

    【讨论】:

      猜你喜欢
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多