我试图在某些日期使用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;帮助者,所以它表示日期与文字有多远。
但我不知道如何或在何处实施此功能?有什么想法吗?
答案 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') %>