我有一个简单的Rails博客应用程序,我目前在路径文件中将欢迎页面设置为我的应用程序“主页”。
root 'welcome#show'
我的show
中也有多种index
和PostsController
种方法:
def show
@post = Post.find(params[:id])
end
def index
@posts = Post.all.order(created_at: :desc).page(params[:page]).per_page(1)
end
我真正想要做的是将root/home
页面设为latest/most-recent/highest-id post
。
例如,如果我的上一篇文章是posts/57
,那么这将是主页。
要清除,我不仅希望最后一篇文章的内容出现在头版...我真的希望最新的帖子成为头版。如果id 57是最后一个帖子,则网址将显示为“post / 57”。
答案 0 :(得分:4)
redirect_to
在 app / controllers / welcome_controller.rb :
def show
redirect_to post_path(Post.last) and return
end
这会将用户重定向到最新的帖子页面。请注意,这将导致向Web服务器发出两个请求:第一个是 welcome#show ,第二个是帖子#show 。
Layouts and Rendering - Using Partials
创建 app / views / posts / _post.html.erb ,其中应包含帖子的HTML。它应该类似于 app / views / posts / show.html.erb ,但请注意它使用的是post
而不是@post
:
<p>
<strong>Title:</strong>
<%= post.title %>
</p>
<p>
<strong>Body:</strong>
<%= post.body %>
</p>
然后在 app / views / welcome / show.html.erb 中的某处:
<%= render partial: 'posts/post', locals: { post: Post.last } %>
答案 1 :(得分:0)
覆盖root_path
root_url
和ApplicationController
class ApplicationController < ActionController::Base
def root_path
latest_post = Post.order("id DESC").first
post_path(latest_post)
end
def root_url
latest_post = Post.order("id DESC").first
post_url(latest_post)
end
end
如果帖子存在,这会将根设置为帖子路径,否则将设置为welcome#show