Rails:在博客中添加“最新帖子”

时间:2016-07-21 23:57:31

标签: ruby-on-rails

将“最新帖子”部分添加到博客

这是我的原始代码,用于显示所有我的帖子,效果很好。

<% @post.each do |post| %>
  <div class="col-md-4 col-sm-6 portfolio-item">
    <a href="#portfolioModal6" class="portfolio-link" data-toggle="modal">
      <div class="portfolio-caption">
        <h4><%= link_to post.title, post %></h4>
        <p class="text-muted"><%= post.created_at.strftime("%B, %d, %Y") %></p>
      </div>
    </a>
  </div>
<% end %>

但是,我还想添加一个显示我最新帖子的大型div。因此,我复制/粘贴上面的代码并将行<% @post.each do |post| %>更改为以下内容:

<% @post = Post.last do |post| %>

没有错误,但也没有出现任何错误。我添加此代码的原因是因为我在教程中看到教师进入rails c并键入@post = Post.last并且可以看到创建的最后一篇文章。但是,当我进入终端并键入它时,我收到错误:

No command '@post' found, did you mean:
 Command 'mpost' from package 'texlive-binaries' (main)
 Command 'rpost' from package 'suck' (universe)
@post: command not found

2 个答案:

答案 0 :(得分:3)

  1. 您不应该在终端上键入它,而是在rails控制台中键入它。在终端上输入rails console,当加载时,您可以执行以下操作:

    post = Post.last
    
  2. 为了只呈现最后一个帖子,你不需要这个块,如下:

        <% post = Post.last %>
        <div class="col-md-4 col-sm-6 portfolio-item">
          <a href="#portfolioModal6" class="portfolio-link" data-toggle="modal">
            <div class="portfolio-caption">
              <h4><%= link_to post.title, post %></h4>
              <p class="text-muted"><%= post.created_at.strftime("%B, %d, %Y") %></p>
            </div>
          </a>
        </div>
    
  3. 顺便说一下,在视图中处理域对象不是最佳做法。如果你有多个对象,可以将它作为控制器中的实例变量,作为Facade对象。

答案 1 :(得分:1)

使用更多的rails约定来扩展@ oreoluwa的答案:

您的帖子对象:

j

您的控制器(您的视图是应该呈现最后一个帖子的位置)。您不应该在视图中进行查询以更好地控制。

class Post < ActiverRecord::Base
  scope :ordered, -> { order(created_at: :desc) } # or use your own column to order
end

您的观点

class ExamplesController < ApplicationController

  def show
    @latest_post = Post.ordered.first
  end

end