我需要能够列出创建每篇文章的月,日和年。在此之前一切正常。
我需要根据他们创建的日子对我的文章进行分组。例如:
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,只显示了第一篇文章。它看起来像这样:
这是我的代码:
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 %>
感谢您的帮助!
答案 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