0

我试图让我的应用程序提取在特定日期创建的所有帖子。

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 语句的事实是,因为它应该找到那个日期的帖子。

此外,我刚刚通过日期时间意识到,它实际上会寻找在同一时间创建的帖子,而我希望它能够提取当天创建的所有帖子,而不是时间。

有什么建议么?

谢谢

4

1 回答 1

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

这将为您提供在相关日期创建的帖子列表,在您的应用程序运行的时区中,按创建时间排序。

您可以根据需要进行许多其他调整(更改排序顺序、使用不同的时区等)。

于 2013-10-16T00:09:32.513 回答