[英]How do I create a link to a specific Post object in a Rails view?
我是新手,所以請原諒任何簡單的問題。 我已經開發了一個博客,並且正在做一些自定義。 只是好奇,如果我想在index.html.erb頁面上呈現特定的帖子,那是可能的。 例如,如果我創建一個帖子,標題為:酷帖子,並且表中的post_id為25,那么在我的索引頁面中我可以調用要渲染的特定帖子嗎?
很難確切說明系統的設置方式,但是在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
文件進行渲染:
假設,在您的app/views/posts/
目錄中創建_post.html.erb
文件,然后將所需的任何渲染代碼放在此處(或從現有的app/views/posts/index.html.erb
文件中抽象出來。)_注意:請使用局部變量post
而不是@post
來@post
局部@post
post
@post
實現最大的靈活性。
然后在index.html.erb
調用它,如下所示:
該調用假定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將返回您的精選帖子,以供在您的首頁上使用,順序為最新到最早。
如果您一次只想要一篇精選文章,則可以將以下內容添加到文章模型中
before_validation :highlander_clause
def highlander_clause
Post.featured.each{|p| p.update_attribute(:featured, false) if featured
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.