我是铁道新手,请原谅任何简单的问题。我开发了一个博客,我正在做一些定制。只是好奇,如果我想在我的index.html.erb页面上呈现一个特定的帖子就可以了。例如,如果我创建一个帖子,标题:Cool Post并且它在表格中有一个25的post_id,在我的索引页面中我可以调用要呈现的特定帖子吗?
答案 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
文件中呈现它:
假设在_post.html.erb
目录中创建一个app/views/posts/
文件,并在其中放置您想要的任何渲染代码(或从现有的app/views/posts/index.html.erb
文件中抽象出来._注意:引用部分使用局部变量post
而不是@post
的帖子,以获得最大的灵活性。
然后在index.html.erb
中将其称为:
此调用假定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