ActiverCord has_many関係は、孤立した新しく作成されたオブジェクトを防ぎます
-
08-10-2019 - |
質問
投稿モデルに属するコメントモデルがあるとします。
新しいコメントインスタンスの作成(new、create、find_or_create_by_xなど)の作成は、投稿がすぐに設定されない限り(パラメーターとして渡すか、コメントを作成するときに常に投稿を参照してください。
投稿に基づいているコメントオブジェクトにデフォルト値を設定したいので、これを行いたいと思います。したがって、投稿参照はすぐに有効である必要があります。
これを達成するための最良の方法は何ですか?ありがとう。
解決
これが機能するためには、 new
あなたはそれをしなければなりません after_initialize
:
def after_initialize
raise "no Post" unless post
end
ただし、コメントがインスタンス化されるたびに実行する必要があるため、過剰なように思えます。デフォルトが適切に設定されていることを保証する書き込みテストと言います。
他のヒント
コメントモデルに検証を追加します。
class Comment < ActiveRecord::Base
validates_presence_of :post_id
end
次に、以下を使用して新しいコメントを作成します。
@post = Post.find(params[:post_id])
@post.comments.create(params[:comment])
所属していません StackOverflow