-1

我正在使用日历,我认为该日历只处理没有时间的日期。如何仅在DateTime属性上获取日期?在日历上工作

注意:requested_date是日期时间属性。我想有要求的日期所有保留和它隐蔽仅日期:

users_controller.rb

def myprofile 
    @reservation = Reservation.all 
    @resv_by_date = @reservation.group_by(&:requested_date) <-- make requested_date to date only 
end 

myprofile.html.erb

<div id="admin"> 
<%= calendar do |date| %> 
    <%= date.day %><br> 
     <% @resv_by_date.each do |reservation| %> 
     <%= reservation.requested_date.to_date %><br> 
    <% end %> 
<% end %> 
</div> 

(this month 'May') requested_date is existing on my database (this month 'May') requested_date is existing on my database

image output after the solution of the 1st answer image output after the solution of the 1st answer

+0

什么数据库您使用的? –

+0

@AnthonyE Sqlite ..我唯一的问题是在控制器上,我只是想从日期时间属性获取日期.. –

+0

@AnthonyE \t 我更新myprofile.html.erb并查看新上传的输出图像..有循环的问题。 –

回答

0

我不认为你想在你的ActiveRecord的关系用一个groupgroup_by这是一个Ruby方法。

此外,该方法从一个DateTime对象得到Datedatetime.to_date

@reservations_by_date = Reservation.select(:requested_date).group(:requested_date) 

@reservations_by_date.each { |reservation| puts reservation.requested_date.to_date } 
0

一般情况下我建议你尝试组中的DB已经(使用group)出于性能的考虑,而不是数据的红宝石代码(group_by)。但在具体情况下,您似乎确实需要在给定时间段(例如月)内检索所有预订,并将其按日期分组,以便您可以在日历视图中显示所有预订。在这种情况下,你确实必须用ruby代码进行分组。

你可以做到这一点只需在group_by更新块:

@reservations_by_date = Reservation.all.group_by { |res| res.requested_date.to_date } 

注意,很可能你会想缩小选择只给定的时间段(如显示的月份)第一,使用where条件,我跳过这部分从这个答案。

上面的分组将创建保留的散列,其中键将是日期(而不是日期),并且值将是给定日期中保留的数组。在日历视图,你可以简单地浏览一旦你使用日期键访问他们:

<% calendar do |date| %> 
    <%= date.day %><br> 
    <% @reservations_by_date[date].each do |reservation| %> 
    <%= reservation.name ... or whatever %><br> 
<% end %>