私はレールに慣れていないので、簡単な質問を許してください。私はブログを開発し、いくつかのカスタマイズを行っています。index.html.erbページに特定の投稿を表示したい場合は、それが可能です。たとえば、投稿、タイトル:Cool Postを作成し、テーブルにpost_idが25である場合、インデックスページでその特定の投稿を呼び出してレンダリングできますか?
3 に答える
彼の質問は、レンダリング/リダイレクトに関するものだと思います。あなたがするべきです(あなたのコントローラーの最後の行として)
render @post
また
redirect_to @post
1 つ目は投稿を表示し、2 つ目は作成/更新後に投稿を表示します。
システムがどのようにセットアップされているかを正確に言うのは難しいですが、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
dcneiner の解決策は技術的には正しいですが、Rails のやり方では、これらをハードコーディングすることはありません。ブログが運用可能になったら、ソースを直接変更してこの投稿を変更する必要があります。これはお勧めできません。
Posts テーブルに追加の列を追加して、投稿をフロント ページに永続的に掲載する必要があるかどうかを示すことをお勧めします。これにより、永続的な投稿を作成時にチェックマークだけで動的に更新できます。
例えば:
class Post < ActiveRecord
named_scope :featured, :conditions => {:featured => true},
:order => "created_at DESC"
end
Post.featured は、フロント ページで使用する注目の投稿を最新のものから順に返します。
一度に 1 つの注目の投稿だけが必要な場合は、以下を Post モデルに追加できます。
before_validation :highlander_clause
def highlander_clause
Post.featured.each{|p| p.update_attribute(:featured, false) if featured
end