1

我试图为我的博客存档创建一个侧栏,列出我的博客条目的所有月份,因此当您单击“2007 年 6 月”之类的链接时,会加载 6 月 7 日的所有博客。这是我的link_to

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(month.first.strftime("%Y-%m-%d")) %>

month.first 是我提出的记录。我的控制器应该看起来像这样吗?:

@blog_posts = BlogPost.where(:created_at.strftime("%Y-%m-%d") => params[:date]).(:select => "title, id, slug, created_at", :order => "created_at DESC")

我希望我可以将记录的 created_by 字段转换为我可以在匹配中传递的格式,但我得到一个未定义的方法错误

4

2 回答 2

3

这个怎么样?

将链接缩小到仅年月:

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(:date => month.first.strftime("%Y-%m")) %>

然后,使用范围语法获取 SQL BETWEEN:

@blog_posts = BlogPost.
              where(:created_at => (params[:date].to_date..(params[:date].to_date + 1.month))).
              order("created_at desc")
于 2011-06-07T03:32:12.167 回答
0

基本上我同意 Dan Croak 所说的(+1)。他回答中的唯一错误是,.to_date如果其中没有完整的日期字符串params[:date](如他的示例),则会引发错误。所以我的建议是:

看法:

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(month.first.strftime("%Y-%m-%d")) %>

控制器:

@blog_posts = BlogPost.
  where(:created_at => params[:date].to_date.beginning_of_month..params[:date].to_date.end_of_month).
  order("created_at desc")

您的原始代码的问题是您试图调用strftimeon :created_at,这是不可能的。

或者,如果您不喜欢 URL 中的完整日期,您可以这样做:

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(month.first.strftime("%Y-%m")) %>

和:

@blog_posts = BlogPost.
  where(:created_at => "#{params[:date]}-01".to_date.beginning_of_month.."#{params[:date]}-01".to_date.end_of_month).
  order("created_at desc")
于 2011-06-07T15:29:42.700 回答