Ruby on rails 在rails中创建博客存档
控制器:Ruby on rails 在rails中创建博客存档,ruby-on-rails,Ruby On Rails,控制器: class PostsController < ApplicationController def index @posts = Post.published respond_to do |format| format.html # index.html.erb format.json { render json: @posts } end end def show . . end def month
class PostsController < ApplicationController
def index
@posts = Post.published
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
def show
.
.
end
def month
@posts_by_month = Post.find(:all, :order => "created_at DESC").group_by { |post| post.created_at.strftime("%B %Y") }
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
end
class PostsController“created_at DESC”).group_by{Post | Post.created_at.strftime(“%B%Y”)}
回应待办事项|格式|
format.html#index.html.erb
format.json{render json:@posts}
结束
结束
结束
帖子#月视图:
<% @posts_by_month.each do |monthname, posts| %>
<p><%= monthname %></p>
<div>
<ul>
<% posts.each do |post| %>
<li><p><%= post.title %></p></li>
<% end %>
</ul>
</div>
<% end %>
帖子#索引视图:
<h1>Listing posts</h1>
<%= render :partial => @posts %>
<h2>Blog archive</h2>
<%= ?I want link to single months archive here? %>
列出帖子
@帖子%>
博客档案
我正在rails中创建一个博客,我想我会添加一个归档部分,您通常会在许多博客的侧栏中看到这个部分。当我导航到posts#month
视图时,它会将该月显示为标题,并列出该月内发布的所有帖子
我现在想做的是在posts#index
视图上发布月份列表,每个月链接到上述posts#month
视图
我不确定要在posts#index
视图中放置什么来完成这一任务。任何关于如何实现的想法或更好的方法都将非常好
感谢您的帮助 我总是这样分组:
@posts_by_month = Post.find(:all, :order => "created_at DESC").group_by { |post| post.created_at.beginning_of_month }
然后创建例如posts/\u post\u archive.html.erb
:
<div id="post-archive">
<% @posts_by_month.each do |month, posts| %>
<h4><%= "#{month.strftime('%B %Y')} (#{posts.count}):" %></h4>
<ul>
<% for post in posts %>
<li><%= link_to post.title, post %></li>
<% end %>
</ul>
<% end %>
</div>
match 'posts/by_year_and_month/:year/:month' => 'posts#by_year_and_month', :as=> :posts_by_year_and_month
<h4><%= link_to "#{month.strftime('%B %Y')} (#{posts.count}):", posts_by_year_and_month_path(:year=> month.year, :month => month.month) %></h4>
在您的routes.rb中:
<div id="post-archive">
<% @posts_by_month.each do |month, posts| %>
<h4><%= "#{month.strftime('%B %Y')} (#{posts.count}):" %></h4>
<ul>
<% for post in posts %>
<li><%= link_to post.title, post %></li>
<% end %>
</ul>
<% end %>
</div>
match 'posts/by_year_and_month/:year/:month' => 'posts#by_year_and_month', :as=> :posts_by_year_and_month
<h4><%= link_to "#{month.strftime('%B %Y')} (#{posts.count}):", posts_by_year_and_month_path(:year=> month.year, :month => month.month) %></h4>
以及修改我们的posts/\u posts\u archive.html.erb
:
<div id="post-archive">
<% @posts_by_month.each do |month, posts| %>
<h4><%= "#{month.strftime('%B %Y')} (#{posts.count}):" %></h4>
<ul>
<% for post in posts %>
<li><%= link_to post.title, post %></li>
<% end %>
</ul>
<% end %>
</div>
match 'posts/by_year_and_month/:year/:month' => 'posts#by_year_and_month', :as=> :posts_by_year_and_month
<h4><%= link_to "#{month.strftime('%B %Y')} (#{posts.count}):", posts_by_year_and_month_path(:year=> month.year, :month => month.month) %></h4>
month.year,:month=>month.month)%>
我总是这样分组:
@posts_by_month = Post.find(:all, :order => "created_at DESC").group_by { |post| post.created_at.beginning_of_month }
然后创建例如posts/\u post\u archive.html.erb
:
<div id="post-archive">
<% @posts_by_month.each do |month, posts| %>
<h4><%= "#{month.strftime('%B %Y')} (#{posts.count}):" %></h4>
<ul>
<% for post in posts %>
<li><%= link_to post.title, post %></li>
<% end %>
</ul>
<% end %>
</div>
match 'posts/by_year_and_month/:year/:month' => 'posts#by_year_and_month', :as=> :posts_by_year_and_month
<h4><%= link_to "#{month.strftime('%B %Y')} (#{posts.count}):", posts_by_year_and_month_path(:year=> month.year, :month => month.month) %></h4>
在您的routes.rb中:
<div id="post-archive">
<% @posts_by_month.each do |month, posts| %>
<h4><%= "#{month.strftime('%B %Y')} (#{posts.count}):" %></h4>
<ul>
<% for post in posts %>
<li><%= link_to post.title, post %></li>
<% end %>
</ul>
<% end %>
</div>
match 'posts/by_year_and_month/:year/:month' => 'posts#by_year_and_month', :as=> :posts_by_year_and_month
<h4><%= link_to "#{month.strftime('%B %Y')} (#{posts.count}):", posts_by_year_and_month_path(:year=> month.year, :month => month.month) %></h4>
以及修改我们的posts/\u posts\u archive.html.erb
:
<div id="post-archive">
<% @posts_by_month.each do |month, posts| %>
<h4><%= "#{month.strftime('%B %Y')} (#{posts.count}):" %></h4>
<ul>
<% for post in posts %>
<li><%= link_to post.title, post %></li>
<% end %>
</ul>
<% end %>
</div>
match 'posts/by_year_and_month/:year/:month' => 'posts#by_year_and_month', :as=> :posts_by_year_and_month
<h4><%= link_to "#{month.strftime('%B %Y')} (#{posts.count}):", posts_by_year_and_month_path(:year=> month.year, :month => month.month) %></h4>
month.year,:month=>month.month)%>
在PostsController中
def index
@posts = Post.published
@grouped_posts = Post.select("COUNT( * ) AS posts, MONTHNAME( created_at ) AS MONTH , YEAR( created_at ) AS YEAR").group("MONTH, YEAR").order("YEAR, MONTH( created_at )")
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
然后在视图index.html.erb中
<h1>Listing posts</h1>
<%grouped_posts.each do |rec|%>
<%=link_to "#{rec.month} #{rec.year} (#{rec.posts})", {:controller => "posts", :action => "month", :month => rec.month, :year => rec.year} %>
<%end%>
<%= render :partial => @posts %>
<h2>Blog archive</h2>
<%= ?I want link to single months archive here? %>
列出帖子
“posts”、:action=>“month”、:month=>rec.month、:year=>rec.year}%>
@帖子%>
博客档案
然后将posts_控制器中的月份操作更改为接受两个参数params[:month]¶ms[:year]
希望这对PostsController有所帮助
def index
@posts = Post.published
@grouped_posts = Post.select("COUNT( * ) AS posts, MONTHNAME( created_at ) AS MONTH , YEAR( created_at ) AS YEAR").group("MONTH, YEAR").order("YEAR, MONTH( created_at )")
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
然后在视图index.html.erb中
<h1>Listing posts</h1>
<%grouped_posts.each do |rec|%>
<%=link_to "#{rec.month} #{rec.year} (#{rec.posts})", {:controller => "posts", :action => "month", :month => rec.month, :year => rec.year} %>
<%end%>
<%= render :partial => @posts %>
<h2>Blog archive</h2>
<%= ?I want link to single months archive here? %>
列出帖子
“posts”、:action=>“month”、:month=>rec.month、:year=>rec.year}%>
@帖子%>
博客档案
然后将posts_控制器中的月份操作更改为接受两个参数params[:month]¶ms[:year]
希望这将有助于如果有人在Postgres中尝试此方法,上述方法将不起作用
def by_year_and_month
@posts = Post.where("YEAR(created_at) = ? AND MONTH(created_at) = ? ", params[:year], params[:month]).order("created_at DESC")
end
所以你可以这样做,
def by_year_and_month
@posts = Post.where('extract(year from created_at) = ?', params[:year]).where('extract(month from created_at) = ?', params[:month]).order("created_at DESC")
end
希望这能帮助一些人。如果有人在Postgres中尝试此方法,上述方法将不起作用
def by_year_and_month
@posts = Post.where("YEAR(created_at) = ? AND MONTH(created_at) = ? ", params[:year], params[:month]).order("created_at DESC")
end
所以你可以这样做,
def by_year_and_month
@posts = Post.where('extract(year from created_at) = ?', params[:year]).where('extract(month from created_at) = ?', params[:month]).order("created_at DESC")
end
希望这能帮助别人。是的,这和我已经做的很相似。这提供了一个月内发布的帖子列表。我试图做的是在索引页面上创建一个名为August
的链接,例如导航到一个页面,该页面列出了8月份的帖子。你知道怎么做吗?这个博客就是一个例子。查看归档部分的左侧。请注意月份是如何存在的,如果单击月份,它将显示该月份的帖子。这就是我试图做的。我得到了这个错误未定义的局部变量或方法posts\u by\u year\u and \u month
抱歉在link\u中添加\u path
到posts\u by\u year\u和\u month
它应该看起来像posts\u by\u year\u和\u month\u路径(:year=>month.year,:month=>month.month)
,答案已更新,并将“:”添加到:as=>:posts\u by\u year\u monthYeah这与我之前的内容类似。这提供了一个月内发布的帖子列表。我试图做的是在索引页面上创建一个名为August
的链接,例如导航到一个页面,该页面列出了8月份的帖子。你知道怎么做吗?这个博客就是一个例子。查看归档部分的左侧。请注意月份是如何存在的,如果单击月份,它将显示该月份的帖子。这就是我试图做的。我得到了这个错误未定义的局部变量或方法posts\u by\u year\u and \u month
抱歉在link\u中添加\u path
到posts\u by\u year\u和\u month
它应该看起来像posts\u by\u year\u和\u month\u路径(:year=>month.year,:month=>month.month)
,答案已更新,并将“:”添加到:as=>:posts\u by\u year\u和\u monthI知道我以前看过你的帖子,因此我需要它。谢谢我知道我以前看过你的帖子,而我最终需要它的原因正是这个。谢谢