Rails 3在日历上需要下个月和上个月的帮助

时间:2011-02-13 23:24:27

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

我现在正在绘制当前月份的日历,现在我想添加上个月和下个月,这就是我在视图中制作日历的方式

<table border="1" width="70%">
  <th colspan=7 align=center><%= @month %> <%= @year %></th>
  <tr width ="10%">
    <% Date::DAYNAMES.each do |days_of_week| %>
      <td align=center><%= days_of_week %></td>
    <% end %>
  </tr>


    <% @tasks.in_groups_of(7, ' ') do |row_tasks| %>
      <tr>
        <% for task in row_tasks %>
          <!-- if Staament here -->
          <td><%= task %></td>
          <!-- Else Staament here -->
        <% end %>
      </tr>
    <% end %> 

  </tr>
</table>

这是控制器

def calendar_of_events    
    @year = Date.today.year
    month = Date.today.month    
    @month = Date::MONTHNAMES[month]
    begin_day = Date.today.beginning_of_month
    @begin = begin_day
    @last = Date.civil(@year, month, -1)
    @blank_day= Date.today.beginning_of_month.wday
    if @blank_day >= 0
      @day = @blank_day - 1
    else
      @day = 0
    end
    @last_day_of_month = @last.mday
    @first_day_of_month = @begin.mday
    @blank_days_of_month = ('').to_a 
    for i in 0..@day    
      @blank_days_of_month2 = (' ').to_a
      @blank_days_of_month1 = @blank_days_of_month
      @blank_days_of_month = @blank_days_of_month2 + @blank_days_of_month1
    end 
    @days_of_month = (@first_day_of_month..@last_day_of_month).to_a
    @tasks = @blank_days_of_month + @days_of_month     
  end

我知道有很多额外的东西,我不需要我正在使用其中的一些,以确保我得到正确的信息。我需要的是点击下一个并获取上个月的下个月和之前的月份。我现在需要的只是获得控制器的命令我可以担心年份+和年份 - 在我开始工作后,任何帮助都会有用!

1 个答案:

答案 0 :(得分:1)

如果你想使用任何Javascript库,你可以使用Ajax。在您的视图中有两个链接,并将click事件的功能附加到这两个链接。例如,

<a href="javascript:void(0);" class="left" id="prev"> </a>
<a href="javascript:void(0);" class="right" id="next"> </a>

如果您正在使用Prototype JS for Javascript库:

document.observe("dom:loaded", function() {  
    $('prev').observe('click', function(event){
        url = '/fetch?m=prev&d=' + d 
        new Ajax.Request(url, { method: 'get' });
        ...
    });

    $('next').observe('click', function(event){
        url = '/fetch?m=next&d=' + d;
        new Ajax.Request(url, { method: 'get' });
        ...
    });
});

在我们正在构建的网址中,d可以是我们要传递以获取任务的日期。您可以在控制器中执行fetch操作来提供此请求。将其添加到工作路线。

希望这有帮助。