You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中如何在视图里正确引用数组元素输出时间范围

Rails视图遍历时间数组的错误修复方案

问题说明

在Rails项目中定义了days和to_ice_cube_time方法,to_ice_cube_time返回由开始时间、结束时间及星期符号组成的二维数组。但在视图中遍历数组时,用timerange.start_time取值触发undefined method 'start_time'错误,需要正确的元素引用方式来输出对应星期的时间范围。

相关代码

模型方法

def days
  {
    monday:    monday,
    tuesday:   tuesday,
    wednesday: wednesday,
    thursday:  thursday,
    friday:    friday,
    saturday:  saturday,
    sunday:    sunday
  }
end

def to_ice_cube_time
  [start_time, end_time, *days.compact_blank.keys]
end  

数组输出示例

[["6:00 AM", "8:00 AM", :monday, :tuesday], ["9:00 AM", "6:00 PM", :thursday, :friday], ["8:00 AM", "4:00 PM", :monday, :tuesday]]

错误视图代码

<% scheduleevent.to_ice_cube_time.each do |timerange| %>
   <p><%= timerange.start_time %> - <%= timerange.end_time %> </p>
<% end %>

报错信息

undefined method 'start_time' for [["6:00 AM", "8:00 AM", :monday, :tuesday], 
["9:00 AM", "6:00 PM", :thursday, :friday], ["8:00 AM", 
"4:00 PM", :monday, :tuesday]]:Array

修复方案

方案1:直接通过数组索引访问

to_ice_cube_time返回的每个timerange是普通数组,不是带属性的对象,因此要用索引获取对应位置的值:

修改后的视图代码:

<% scheduleevent.to_ice_cube_time.each do |timerange| %>
  <% start = timerange[0] %>
  <% finish = timerange[1] %>
  <% weekdays = timerange[2..-1] %>
  <p><%= start %> - <%= finish %> (星期:<%= weekdays.map(&:humanize).join('、') %>)</p>
<% end %>
  • timerange[0]:获取开始时间
  • timerange[1]:获取结束时间
  • timerange[2..-1]:获取所有星期符号,map(&:humanize)将符号转为可读的星期名称,join拼接成字符串

方案2:重构方法返回结构化对象(更易维护)

如果想避免硬编码索引,让代码可读性更高,可以让to_ice_cube_time返回带属性的对象,比如OpenStruct:

修改模型方法:

require 'ostruct'

def to_ice_cube_time
  # 若实际是多个时间范围,需调整逻辑生成对应数量的OpenStruct对象数组
  [
    OpenStruct.new(
      start_time: start_time,
      end_time: end_time,
      days: days.compact_blank.keys
    )
  ]
end

此时视图即可用属性访问方式:

<% scheduleevent.to_ice_cube_time.each do |timerange| %>
  <p><%= timerange.start_time %> - <%= timerange.end_time %> (星期:<%= timerange.days.map(&:humanize).join('、') %>)</p>
<% end %>

内容的提问来源于stack exchange,提问作者spacerobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:20:42