1

私はレールに慣れていないので、簡単な質問を許してください。私はブログを開発し、いくつかのカスタマイズを行っています。index.html.erbページに特定の投稿を表示したい場合は、それが可能です。たとえば、投稿、タイトル:Cool Postを作成し、テーブルにpost_idが25である場合、インデックスページでその特定の投稿を呼び出してレンダリングできますか?

4

3 に答える 3

0

彼の質問は、レンダリング/リダイレクトに関するものだと思います。あなたがするべきです(あなたのコントローラーの最後の行として)

render @post

また

redirect_to @post

1 つ目は投稿を表示し、2 つ目は作成/更新後に投稿を表示します。

于 2009-11-23T05:13:04.843 に答える
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次のように forで呼び出します。

    'posts/post', :object => @post %>

この呼び出しは、ファイルがパーシャルindex.html.erbと同じディレクトリにないことを前提としています。_post.html.erb

于 2009-11-23T05:07:05.680 に答える
0

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
于 2009-11-24T16:43:41.210 に答える