【问题标题】:Railscasts Calendar - "undefined method beginning_of_month", Rails 4Railscasts 日历 - “未定义方法 begin_of_month”,Rails 4
【发布时间】:2015-12-20 22:21:11
【问题描述】:

我希望能够在日历上打印学生作业。我在日历上准确地关注了 railscasts 视频(修订版),但我收到了这个错误:

nil:NilClass 的未定义方法 `beginning_of_month'

代码:

homeworks_controller.rb

... def calendar
            @homeworks = Homework.all 
            @homeworks_by_date = @homeworks.group_by(&:date)
        end...

日历.html.erb

<%= calendar @date do |date| %>
 <%= date.day %>
 <% if @homeworks_by_date[date] %>
 <ul>
  <% @homeworks_by_date[date].each do |homework| %>
  <li><%= link_to homework.subject, homework %></li>
  <% end %>
</ul>
  <% end %>
<% end %>

calendar_helper.rb

module CalendarHelper
  def calendar(date = Date.today, &block)
    Calendar.new(self, date, block).table
  end

class Calendar < Struct.new(:view, :date, :callback)
    HEADER = %w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday]
    START_DAY = :sunday

    delegate :content_tag, to: :view

    def table
      content_tag :table, class: "calendar table table-bordered table-striped" do
        header + week_rows
      end
    end

    def header
      content_tag :tr do
        HEADER.map { |day| content_tag :th, day }.join.html_safe
      end
    end

    def week_rows
      weeks.map do |week|
        content_tag :tr do
          week.map { |day| day_cell(day) }.join.html_safe
        end
      end.join.html_safe
    end

    def day_cell(day)
      content_tag :td, view.capture(day, &callback), class: day_classes(day)
    end

    def day_classes(day)
      classes = []
      classes << "today" if day == Date.today
      classes << "not-month" if day.month != date.month
      classes.empty? ? nil : classes.join(" ")
    end

    def weeks
      first = date.beginning_of_month.beginning_of_week(START_DAY)
      last = date.end_of_month.end_of_week(START_DAY)
      (first..last).to_a.in_groups_of(7)
    end
end
end

作业表中的日期列是一个字符串 - 这会是问题吗?在我将@date 放在日历视图的第一行之前,它显示了日历表,但不会打印日历上记录的链接。输入@date 后,出现上述错误。我使用的是 Rails 4,教程可能有点过时了。

还有什么我需要做的我忽略的事情吗?谢谢。

更新:

在控制器中定义@date 后,我现在可以看到日历,但它仍然不会打印日历上的链接。

def calendar
        @homeworks = Homework.all 
        @homeworks_by_date = @homeworks.group_by(&:date)
        @date = params[:date] ? Date.parse(params[:date]) : Date.today
    end

【问题讨论】:

  • 您没有为控制器中的 @date 变量分配任何内容。
  • 我需要做什么?有点卡住了。日历有效 - 它只是不会打印链接。谢谢。

标签: ruby-on-rails ruby-on-rails-4 calendar railscasts


【解决方案1】:

您可能是对的,问题在于日期列是字符串而不是日期时间。

beginning_of_month 是 Rails 助手,但仅在 DateTime 上可用。

因此,要么将列转换为日期时间,要么使用 strptimeString 转换为 DateTime

DateTime.strptime(date, format_string)

其中format_string 是一个字符串,指示日期的格式。这是我最喜欢的strftime/strptime 参考:http://strftime.net/

【讨论】:

  • 谢谢,我将列更改为日期时间,但它仍然不起作用。链接不会显示在日历上。
  • 好的,谢谢,我是部分正确的。我改变了日期,它现在可以工作了!谢谢:D
猜你喜欢
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 2013-07-16
相关资源
最近更新 更多