2011-07-25 11 views
1

私は投稿モデルとコメントモデルを持っています。コメントを3に限定したいと思います。これはどうやってやるの?Rails Design Question

  1. 検証を作成するのが最善でしょうか?もしそうなら、このように見えるのは のようですか?

  2. ビューunless Post.comments == 3でこれを行いますか?

  3. コールバックは意味がありますか?

答えて

4

投稿のコメント検証は、「コメント」モデルの責任ですので、私は以下のコードをお勧めしたいと思いカウント:ビュー機能を提供するために

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 
+0

を、あなたはヘルパーメソッドを使用することができます – Anatoly

1

あなたが許可したくないその4番目のコメントを送信しないようにします。あなたのコントローラーでチェックを行い、フラグを渡す必要があると言う人もいるかもしれませんが、これはシンプルなチェックのようです。

0

モデルで検証してください。上記のhereのようにvalidates_withを使用できます。あなたには、いくつかの理由(競合状態または管理ポスト3の後に応答するための4件のコメントがある場合を考慮して

、あなたは、

unless Post.comments.length >= 3 
    show_form 
end 

よう不平等とその方法をチェックしたほうが良いと思います等)は、フォームstilsが表示されません。

3

常にモデルレベルとビューで検証する必要があります。

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 %>