我正在基于此 Railscast tutorial 创建一个日历 View .在本教程中,:published_on 字段是一个日期字段。我的问题是,如果 :published_on 是日期时间字段而不是日期字段,我将如何调整下面的代码以使其工作?
迁移
t.date :published_on
Controller :
def index
@articles = Article.all
@articles_by_date = @articles.group_by(&:published_on)
@date = params[:date] ? Date.parse(params[:date]) : Date.today
end
查看:
<div id="articles">
<h2 id="month">
<%= link_to "<", date: @date.prev_month %>
<%= @date.strftime("%B %Y") %>
<%= link_to ">", date: @date.next_month %>
</h2>
<%= calendar @date do |date| %>
<%= date.day %>
<% if @articles_by_date[date] %>
<ul>
<% @articles_by_date[date].each do |article| %>
<li><%= link_to article.name, article %></li>
<% end %>
</ul>
<% end %>
<% end %>
</div>
最佳答案
我们只需要按日期而不是日期时间对文章进行分组:
@articles_by_date = Article.all.group_by {|i| i.created_at.to_date}
删除@articles 行,它看起来没有任何作用。
应该就这些了。</p>
对于 Rails 3.x + 方法,使用 ActiveRecord group函数,它将使用数据库执行分组,而不是实例化所有记录然后分组。
@articles_by_date = Article.group("date(created_at)")
关于ruby-on-rails - Ruby on Rails - 将日期时间的哈希值转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11969620/