这是我的原始代码,用于显示所有我的帖子,效果很好。
<% @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
答案 0 :(得分:3)
您不应该在终端上键入它,而是在rails控制台中键入它。在终端上输入rails console
,当加载时,您可以执行以下操作:
post = Post.last
为了只呈现最后一个帖子,你不需要这个块,如下:
<% 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>
顺便说一下,在视图中处理域对象不是最佳做法。如果你有多个对象,可以将它作为控制器中的实例变量,作为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