找不到日期

时间:2013-10-15 23:59:58

标签: ruby-on-rails ruby-on-rails-4

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

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

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

有什么建议吗?

由于

1 个答案:

答案 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

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

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