如何在发布文章时创建指向DATE的链接,并列出在同一日期

时间:2017-10-04 15:26:22

标签: ruby-on-rails

我需要能够列出创建每篇文章的月,日和年。在此之前一切正常。

我需要根据他们创建的日子对我的文章进行分组。例如:

  • 2017年10月4日(这必须是一个链接,一旦被阻止,就会引导我到一个页面                    包含当天创建的所有文章的集合                    )。

                  Besides making "October 4th, 2017" a link to all the 
                  articles, I also need to list those same articles titles 
                  below "October 4th, 2017" on the initial page.
    
    • 第一篇(指向该文章的链接)
    • 第二条(链接到该单篇文章)
    • 第三条(指向该文章的链接)
    • 依旧......

我的代码看起来很hacky,但是直到现在一切都有效,因为" 2017年10月4日"链接没有引导我到一个我可以看到所有文章的页面,但它给了我一个奇怪的URL,只显示了第一篇文章。它看起来像这样:

website.com/articles.34%2F38%2F39%2F40%2F41%2F42

这是我的代码:

  articles_controller.rb

  def listarticles

    @articles = Article.order(date: :desc) 
    @article_days = @articles.group_by { |t| t.date.beginning_of_day }

  end
listarticles.html.erb

<% @article_days.each do |day, articles| %>

   <%= link_to day.strftime('%d''%B' '%Y'), articles_path(articles) %>

   <% articles.each do |article| %>

       <%= link_to article.title, article_path(article) %>

   <% end %>
<% end %>

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

违规行是:

articles_path(articles)

您已将一系列文章传递给路径,Rails将其转换为其ID。所以这转化为:

/articles.34/38/39/40/41/42

这会被编码到你到达的地方(“/”替换为%2F)

我不确定你是如何得到第一篇文章的。但通常点后面的部分表示格式,如你可以看到你的路线:

articles  GET  /articles(.:format)   articles#index

为了使#index仅显示您想要的列表,您需要将其作为查询字符串发送:

articles_path(ids: articles.map(&:id).join(","))

这会给你

/articles?ids=34,38,39,40,41,42

然后在你的控制器中,你需要这样的东西:

def index
  ids = params[:ids].split(",") if params[:ids]
  @articles = Article.where(id: ids) if ids
  @articles ||= Article.all
end