我想让我的应用程序提取在特定日期创建的所有帖子。
case meta_type
when "user"
@meta = User.find(params[:user_id])
@meta_title = @meta.username + "'s Posts"
@posts = Post.find(:all, :conditions => { :user_id => @meta.id})
when "category"
@meta = params[:category]
@meta_title = @meta + " Posts"
@posts = Post.find(:all, :conditions => { :category => @meta})
when "date"
@meta = Date.parse(params[:date])
@meta_title = @meta.strftime("%d/%m/%Y") + " Posts"
@posts = Post.find(:all, :conditions => { :created_at => @meta})
end
以下是我的观点:
- if @meta
%h2= @meta_title
- if @posts.count > 0
- @posts.each_slice(2) do |slice|
.row
- slice.each do |post|
.col-sm-6
.blog_entry
.img
%h3
%a= link_to post.title, posts_path + '/' + post.id.to_s
= render "blog_meta", :post => post
- else
%p= @user.username + " has no posts."
- else
%h2= "User does not exist."
我得到undefined method 'username' for nil:NilClass
这本身不是问题,但事实是它被过滤到了else语句,因为它应该找到该日期的帖子。
此外,我刚刚通过日期时间来实现,它实际上将寻找在同一时间创建的帖子,而我希望它能够提取当天创建的所有帖子,而不是时间。
有什么建议吗?
由于
答案 0 :(得分:1)
因此,忽略了您正在评估日期的确切时区的微妙之处,您可以更改时间"日期"阻止阅读如下
@meta = Date.parse(params[:date])
@meta_title = @meta.strftime("%d/%m/%Y") + " Posts"
beginning_of_day = @meta.to_datetime.beginning_of_day
end_of_day = @meta.to_datetime.end_of_day
@posts = Post.where("created_at >= ?", beginning_of_day).where("created_at < ?", end_of_day).order(:created_at).all
这将为您提供在相关日期创建的帖子列表,在您的应用运行的时区,按创建时间排序。
您可以根据需要进行许多其他调整(更改排序顺序,使用不同的时区等)。