我是 Rails 新手,所以请原谅任何简单的问题。我已经开发了一个博客,并且正在做一些定制。只是好奇,如果我想在我的 index.html.erb 页面上呈现特定的帖子是可能的。例如,如果我创建一个帖子,标题:Cool Post,并且它在表中的 post_id 为 25,我可以在我的索引页面中调用该特定帖子来呈现吗?
3 回答
很难准确地说出你的系统是如何设置的,但是在 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
为了获得最大的灵活性。然后
'posts/post', :object => @post %>index.html.erb
像这样在你的 for 中调用它:
此调用假定index.html.erb
文件与部分文件不在同一目录中_post.html.erb
。
我认为他的问题是关于渲染/重定向。您应该这样做(作为控制器中的最后一行)
render @post
或者
redirect_to @post
第一个显示帖子,第二个显示创建/更新后的帖子。
虽然 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