显示带有日期的单词的collection_select下拉列表

时间:2015-09-21 19:14:01

标签: ruby-on-rails ruby

我试图在某些日期使用collection_select创建一个简单的下拉列表,但是我很难在现在的时间内显示单词中的日期(即"从今天开始的一个月和#34;)

到目前为止,我有:

<%= f.collection_select :uk_review_at, dates_for_review_select, :to_s, :to_s, {}, :class => "form-control" %>

myGridView.Rows[myGridView.SelectedIndex].Cells[0].Text

(从这里开始 - &gt; RoR - collection_select from array

但我不知道如何更改日期的显示方式。目前它将它们显示为正常日期,但我希望它们使用rails&#34; distance_of_time_in_words&#34;帮助者,所以它表示日期与文字有多远。

但我不知道如何或在何处实施此功能?有什么想法吗?

2 个答案:

答案 0 :(得分:3)

options_for_select将采用数组数组,每个子数组的第一个元素是显示值,第二个元素是返回的值。

所以这应该有用......

def dates_for_review_select
    [Date.today, (Date.today + 2.weeks), (Date.today + 1.month), (Date.today + 2.months), (Date.today + 3.months)]
end

<%= f.select :uk_review_at, options_for_select(dates_for_review_select.map{|d| [distance_of_time_in_words(Date.today, d), d]}), {}, :class => "form-control review-date" %>

编辑使用camillavk使用的最终版本。

答案 1 :(得分:0)

您可以将dates_for_review_select作为集合对象,:itself作为值函数,并使用lambda distance_of_time_in_words作为文本函数,从而提高可读性。

<%= f.collection_select(
      :uk_review_at,
      dates_for_review_select,
      :itself,
      -> (t) { distance_of_time_in_words(Date.today, t) },
      class: 'form-control review-date') %>