在我的Rails 4应用程序中,我有以下模型:
class Calendar < ActiveRecord::Base
has_many :administrations
has_many :users, through: :administrations
has_many :posts
has_many :comments, through: :posts
end
class Administration < ActiveRecord::Base
belongs_to :user
belongs_to :calendar
end
class Post < ActiveRecord::Base
belongs_to :calendar
has_many :comments
end
post
个对象会显示其所属日历的Calendars#Show
视图。
每封帖子都有:date
个自定义属性(与:created_at
默认属性不同)。
我想在Calendars#Show
视图中实施导航,以便我按:date
过滤帖子并逐月显示:
我已经开始实现如下:
在calendars_controller.rb
中,我有:
def show
@user = current_user
@calendar = @user.calendars.find(params[:id])
@current_month = params[:month].blank? ? Date.today.month : params[:month].to_i
@current_year = params[:year].blank? ? Date.today.year : params[:year].to_i
if @current_month == 13
@current_month = 1
@current_year = @current_year + 1
end
if @current_month == 0
@current_month = 12
@current_year = @current_year - 1
end
@posts = @calendar
.posts
.includes(:comments)
.where("Extract(month from date) = ?", @current_month)
.where("Extract(year from date) = ?", @current_year)
.order "date DESC"
# authorize @calendar
end
在Calendars show.html.erb
文件中,我有:
<%= link_to '< Previous', calendar_path(@calendar, month: @current_month - 1) %>
<%= "#{Date::MONTHNAMES[@current_month]} #{@current_year}" %>
<%= link_to 'Next >', calendar_path(@calendar, month: @current_month + 1) %>
(然后我有一个显示相关帖子的循环)。
上述代码在本年度运作良好,即我可以每月导航,每个月都会获得正确的帖子。
然而,当我尝试导航到前一年(几次点击“&lt; Previous”按钮)或下一年(几次点击“&lt; Previous”按钮),然后两次事情发生了:
知道我的代码有什么问题吗?
答案 0 :(得分:2)
我认为你也必须将@current_year
传递给calendar_path
。看起来这种情况总是将2015年定为当年。
@current_year = params[:year].blank? ? Date.today.year : params[:year].to_i
因为它适用于12月和1月的原因是因为您更改当月0 or 13
时的当前年份
这应该有效
<%= link_to '< Previous', calendar_path(@calendar, month: @current_month - 1, year: @current_year) %>
<%= link_to 'Next >', calendar_path(@calendar, month: @current_month + 1, year: @current_year) %>