Rails - 按created_at月份和年份

时间:2016-10-20 03:39:20

标签: ruby-on-rails ruby

像标题所说的那样 - 我试图创建将用户带到页面的链接,显示当月发布的所有博客文章。

在存档索引页面上,我希望它们显示为:



ul {
  list-style-type: circle;
  }

li {
  display: block;
  }

<h3>2016</h3>
<ul>
  <li>October</li>
  <li>September</li>
  <li>Etc.</li>
</ul>
<h3>2015</h3>
<ul>
  <li>Same deal here</li>
</ul>
&#13;
&#13;
&#13;

我使用了发现here的帖子的回复,让它在索引页面上正确显示(现在只需几个月)。但是,当我点击某个月的链接时 - 它会显示所有帖子。该网址为7月部分的http://localhost:3000/posts?month=July+2016,但所有帖子都在显示。

这是我的片段 - 我确实根据上面的答案改变了它们以满足我的需求。

指数:

<% @posts_by_month.each do |m, p| %>
    <div class="col-md-9">
        <ul>
            <li><%= link_to m, posts_path(:month => m) %></li>
        </ul>
    </div>
    <div class="col-md-3">

    </div>
<% end %>

archive_controller:

def index
    @posts_by_month = Post.all.order(created_at: :desc).group_by { |post| post.created_at.strftime("%B %Y") }

    if params[:month && :year]
        date = Date.parse("1 #{params[:month]}")
        @arch_posts = Post.where(publish: true).where(:created_at => date..date.end_of_month).order(created_at: :desc)
    else
        @arch_posts = Post.all
    end
end

我不确定我是否应该把它放在post_controller中。我试图改变周围的事情,但没有发挥作用。以下是我的post_controller索引:

  def index
    if params[:search].present?
        @posts = Post.matching_title_or_content(params[:search]).page params[:page]
    else
        @posts = Post.all.order(id: :desc).page params[:page]
    end

    @notif_count = Notification.where(notifiable_type: 'Visitor').count + Notification.where(notifiable_type: 'Comment').count
    @mess_count = Message.where(status: false).count
    @to_approve_count = Comment.where(status: false).count
  end

我是Ruby的新手,所以欢迎任何输入。谢谢!

1 个答案:

答案 0 :(得分:0)

这不是正确的解决方案,因为我不知道你的视图代码,但我仍然会提到你在代码中注意到的一些事情。

  1. if params[:month && :year]。我不认为这是一个正确的语法。它应该像if params[:month] && params[:year]
  2. 您没有发送任何year参数,因为您可以看到网址中只有?month=July+2016,因此这只会发送July 2016值为+的参数?month=July&year=2016表示空白空间而不是不同的参数。也许你想要Date.parse("1 #{params[:month]}")
  3. 之类的东西
  4. 1也许这是正确的,但我怀疑你是通过在字符串中保留# before you call delete house.delete_reason = 'banana' # and then you can retrieve it in your function @receiver(pre_delete, sender=House) def delete_house(sender, instance, **kwargs): reason = getattr(instance, 'delete_reason', '') ... 来实现的。