同じページにコメントのある投稿があり、投稿/コメントを表示しているのと同じページに新しいコメントを取り込むためのフォームをレンダリングするとします。投稿has_many
コメント。コードは次のように:Railsのレンダリングコマンドの結果に悩まされている
class PostsController < ApplicationController
...
def show
@post = Post.find(:params[id])
@comment = Post.comments.new
end
...
end
を今、あなたはあなたのビューで<%= @post.comments.count %>
を呼び出すときに、それが保存されたコメントの数を与えるが、あなたは<%= render @post.comments %>
を呼び出す場合、それはすべて保存されたコメントを返しPLUS新しく作成された(まだ保存されていません従ってまだ無効です)。どうしてこれなの?これは実際に私がこれを見つけるのに時間がかかりました。これは有用であるとは想像もできません。有効なデータベースレコードをすべてレンダリングするだけではいかがですか?
誰かがこれに遭遇しましたか?修正するのは簡単ですが困惑します。
でも、私は@ post.commentsを実行するときにクエリを実行する必要があると思いますか?私は、インスタンス変数にコメント配列を割り当てていないので、ポストオブジェクトのみをデータベースから取得する必要があると私は考えています。 –
それはもちろん、ある時点で行われなければなりません。 ARは通常、最初に実際に使用されたときに関連オブジェクトを遅延ロードし、コレクションを変更する(または明示的な検索などを行う)場合にのみ、キャッシュを再ロードします。私は100%確信していませんが、comments.new呼び出しが既に他のコメントを読み込んでいる可能性があり、最後に保存されていないオブジェクトを覚えています。 –
それがあなたを助けたら、その答えを受け入れることができますか? –