将最新帖子显示为Rails根页面

时间:2014-02-16 05:23:49

标签: ruby-on-rails ruby-on-rails-4

我有一个简单的Rails博客应用程序,我目前在路径文件中将欢迎页面设置为我的应用程序“主页”。

  root 'welcome#show'

我的show中也有多种indexPostsController种方法:

  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”。

2 个答案:

答案 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_urlApplicationController
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