非类对象(Gems)的Rails类方法替代方案

时间:2012-11-21 21:50:51

标签: ruby-on-rails ruby-on-rails-3 gem

我正在使用calendar gem在我的Events班级中生成基本日历。

在我的应用程序助手中,我创建了一个帮助方法来调用它:

def calendar
  @calendar ||= Cal::MonthlyCalendar.from_params params[:month], start_week_on: :sunday
end

日历可以通过几天和几周的默认方式进行精细循环,以创建月度日历,但我想创建一个仅显示当前周和即将到来的一周的日历。目前,我通过视图中的一个大if语句执行此操作:

...
<% calendar.weeks.each do |week| %>
  <tr>
    <% week.each do |day| %>
      <% if day.number >= Date.today.beginning_of_week(start_day = :sunday).day && day.date.month == Date.today.month %>
...

正如你所看到的,它不是很合适。有没有办法为此创建“类方法”或“范围”,即使它不是一个对象本身?显然,上面没有显示先前或未来的月份,这意味着它必须更加冗长,所以我一直在寻找更优雅的解决方案。但是,我会把方法放在哪里?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我最终创建了自己的方法来生成比gem更好的日历。对于那些在寻找答案的问题上磕磕绊绊的人,我建议将第三方gem放入模型类(如果可能的话),然后只是这样定义范围。但就我的目的而言,我只需要一个非常基本的日历函数,所以我创建了一些基本上使用一些内置Rails函数循环几天的方法。