【问题标题】:Rails Simple Calendar Gem ErrorRails 简单日历宝石错误
【发布时间】:2026-01-09 23:40:01
【问题描述】:

我正在尝试让 simple_calendar gem 在我的 rails 应用程序中工作。但不断得到一个“未定义的方法‘has_key?’对于 nil:NilClass"

运行 Rails 5.0.0

Gemfile -> gem "simple_calendar", "~> 2.0"

运行“捆绑安装”命令,重新启动应用程序

错误截图 --> http://imgur.com/a/umAQH

控制器和视图页面的Pastebin -> http://pastebin.com/8WX4dZNs

提前致谢!

【问题讨论】:

    标签: ruby-on-rails rubygems


    【解决方案1】:

    根据文档,calendar 助手采用Hash 参数。在您的代码 sn-p 中,您传递了一组事件 (@events),而不是选项的 Hash

    如果您想传递事件,文档会显示如何进行。

    <%= month_calendar events: @meetings do |date, meetings| %>
      <%= date %>
    
      <% meetings.each do |meeting| %>
        <div>
          <%= meeting.name %>
        </div>
      <% end %>
    <% end %>
    

    来源:https://github.com/excid3/simple_calendar#rendering-events

    因此,在您的情况下,您需要将 @events 集合作为键值对传递,如下所示:&lt;%= calendar events: @events do %&gt;

    【讨论】:

      【解决方案2】:

      我认为您需要在用于事件的模型中添加 start_time 别名定义,我的 app/models/evento.rb 中有此定义

      def start_time
        self.fecha
      end
      

      这里的“fecha”是我的活动的开始日期。然后你必须像 Carlos Ramirez 解释的那样操纵你的事件,所以你必须在你的 'calendar.html.erb' 中有这样的东西:

      <h3>Eventos (<%= @eventos.count %>)</h3>
      <%= month_calendar events: @eventos do |date, eventos| %>
        <%= date.day %>
        <% eventos.each do |evento| %>
          <div>
            <%= link_to evento.title, evento %>
          </div>
        <% end %>
      <% end %>
      

      这应该会呈现指向您的活动的链接。

      【讨论】:

        【解决方案3】:

        将文件从 https://github.com/excid3/simple_calendar/tree/master/lib 目录复制到我的应用程序 lib 目录中

        编辑了我的 calendar.html.erb 文件

        <%= month_calendar do |date| %>
        <%= date %>
        <% end %>
        

        重新启动服务器并显示日历

        【讨论】: