如何在Rails视图中创建指向特定Post对象的链接?

时间:2009-11-23 04:35:04

标签: ruby-on-rails ruby blogs render

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

3 个答案:

答案 0 :(得分: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中将其称为:

     'posts / post',:object =&gt; @post%&gt;
  3. 此调用假定index.html.erb文件与_post.html.erb部分文件不在同一目录中。

答案 1 :(得分:0)

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

render @post

redirect_to @post

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

答案 2 :(得分:0)

虽然dcneiner的解决方案在技术上是正确的,但Rails的方法并不是对这些东西进行硬编码。一旦博客开始运作,您将不得不直接修改源以更改此帖子。不建议这样做。

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

例如:

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

Post.featured将返回您的精选帖子,以便在首页上使用,从最新到最早订购。

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

  before_validation :highlander_clause

  def highlander_clause
    Post.featured.each{|p| p.update_attribute(:featured, false) if featured
  end