1

我是 Rails 新手,所以请原谅任何简单的问题。我已经开发了一个博客,并且正在做一些定制。只是好奇,如果我想在我的 index.html.erb 页面上呈现特定的帖子是可能的。例如,如果我创建一个帖子,标题:Cool Post,并且它在表中的 post_id 为 25,我可以在我的索引页面中调用该特定帖子来呈现吗?

4

3 回答 3

0

很难准确地说出你的系统是如何设置的,但是在 Rails 中“正确”的方法是在Controller你的页面中执行类似的操作:

def index
   @post = Post.find(25)

   ... Your other code here ...
end

在你的index.html.erb你可以输出帖子:

<h2><%= h(@post.title) %></h2>
<%= h(@post.body) %>

当然,我完全猜测您的字段@post

编辑:如果您要做的只是渲染,@post您仍然需要检索要在控制器中渲染的帖子,但是您将需要使用部分并从index.html.erb文件中渲染它:

  1. 假设,在您的目录中创建一个_post.html.erb文件app/views/posts/,并在那里放置您想要的任何渲染代码(或从现有app/views/posts/index.html.erb文件中抽象它。_注意:请参阅部分中的帖子,使用局部变量post不是@post为了获得最大的灵活性。

  2. 然后index.html.erb像这样在你的 for 中调用它:

    'posts/post', :object => @post %>

此调用假定index.html.erb文件与部分文件不在同一目录中_post.html.erb

于 2009-11-23T05:07:05.680 回答
0

我认为他的问题是关于渲染/重定向。您应该这样做(作为控制器中的最后一行)

render @post

或者

redirect_to @post

第一个显示帖子,第二个显示创建/更新后的帖子。

于 2009-11-23T05:13:04.843 回答
0

虽然 dcneiner 的解决方案在技术上是正确的,但 Rails 的方式不是硬编码这些东西。博客投入使用后,您必须直接修改源代码才能更改此帖子。不建议这样做。

我将建议您在帖子表中添加一个额外的列,以表示帖子是否应永久显示在首页上。这使您可以在创建永久帖子时只使用复选标记来动态更新它。

例如:

class Post < ActiveRecord
  named_scope :featured, :conditions => {:featured => true},
   :order => "created_at DESC"
end

Post.featured 将返回您的精选帖子以在您的首页上使用,按最新到最旧的顺序排列。

如果您一次只想要一个特色帖子,您可以将以下内容添加到 Post 模型

  before_validation :highlander_clause

  def highlander_clause
    Post.featured.each{|p| p.update_attribute(:featured, false) if featured
  end
于 2009-11-24T16:43:41.210 回答