options_from_collection_for_select的text_method日期转换

时间:2016-07-09 20:31:41

标签: ruby-on-rails ruby date-conversion

我打算创建一个下拉列表供选择。

预期结果:

March 2016
August 2016

使用这些代码,因为我的下拉列表如下所示,因为数据库正在存储YY-MM-DD

2016-03-01
2016-08-01

这是我的代码:

<%= form_tag('/admin/users', method: :get) do %>
<%= select_tag "intake_date", options_from_collection_for_select(Membership.select(:intake_date).distinct, 'intake_date', 'intake_date')%>
<%= submit_tag %>
<% end %>

我已尝试将text_method中的options_from_collection_for_select更改为

Membership.all.pluck(:intake_date).uniq.inject{ |date| date.strftime(%B %Y) }

但结果仍不如预期。

1 个答案:

答案 0 :(得分:3)

集合选择的valuetext方法都可以响应方法调用,这会产生对象的实例,结果将用于选择选项。

在您的情况下,您应该能够解决:

select_tag 'intake_date', options_from_collection_for_select(Membership.pluck(:intake_date), :to_s, proc{|date| date.strftime("%B %Y")})

这假设您将在数据库中保存记录之前解析日期,因为值方法是日期字符串