私は投稿モデルとコメントモデルを持っています。コメントを3に限定したいと思います。これはどうやってやるの?Rails Design Question
検証を作成するのが最善でしょうか?もしそうなら、このように見えるのは のようですか?
ビュー
unless Post.comments == 3
でこれを行いますか?コールバックは意味がありますか?
私は投稿モデルとコメントモデルを持っています。コメントを3に限定したいと思います。これはどうやってやるの?Rails Design Question
検証を作成するのが最善でしょうか?もしそうなら、このように見えるのは のようですか?
ビューunless Post.comments == 3
でこれを行いますか?
コールバックは意味がありますか?
投稿のコメント検証は、「コメント」モデルの責任ですので、私は以下のコードをお勧めしたいと思いカウント:ビュー機能を提供するために
class Comment < ActiveRecord::Base
belongs_to :post
before_create :limit_number
private
def limit_number
if post.comments.count >= 3
errors.add(:post, "the limit of comments is over")
end
end
end
class Post < ActiveRecord::Base
has_many :comments
end
あなたが許可したくないその4番目のコメントを送信しないようにします。あなたのコントローラーでチェックを行い、フラグを渡す必要があると言う人もいるかもしれませんが、これはシンプルなチェックのようです。
モデルで検証してください。上記のhereのようにvalidates_with
を使用できます。あなたには、いくつかの理由(競合状態または管理ポスト3の後に応答するための4件のコメントがある場合を考慮して
、あなたは、
unless Post.comments.length >= 3
show_form
end
よう不平等とその方法をチェックしたほうが良いと思います等)は、フォームstilsが表示されません。
常にモデルレベルとビューで検証する必要があります。
class Comment < ActiveRecord::Base
belongs_to :post
validate :check
private
def check
if post.present?
errors.add("Post", "can not have more than 3 comments") if post.comments.size >= 3
end
end
end
class Post < ActiveRecord::Base
# other implementation...
def commentable?
comments.size <= 3
end
end
このように、#commentable?
と電話してください。ビューの値を決してハードコードするべきではありません。
<% if @post.commentable? %>
<%= render "form" %>
<% end %>
を、あなたはヘルパーメソッドを使用することができます – Anatoly