2012-05-04 34 views
0

私は投稿has_many Commentsの関連付けを持っています。投稿はブール値属性publishedです。 post.publishedがfalseの場合、新しいコメントは有効ではありません。 この種の検証を実行するベストプラクティスは何ですか?Railsのカスタム検証

私はこのようにしてみましたが、悲しいことに、正しく動作しません。まだ未発表の投稿に対して新しいコメントを作成することは可能です。

class Comment < ActiveRecord::Base 
    validates :post_id, presence: true, if: :post_is_published 

    ... 
    def post_is_publised 
    post && post.published 
    end 
end 

答えて

1

うーん..私はこれを試してみてください...あなたのコードに構文エラーがあると思う:

class Comment < ActiveRecord::Base 
    validates :post_id, :presence => true, :if => :post_is_published 

    def post_is_publised 
    post.try(:published) 
    end 
end 

あなたのコンソール出力を読み込み、1つのより多くの時間をあなたの質問をチェックした後:

class Comment < ActiveRecord::Base 
    validate :post_has_to_be_published 

    def post_has_to_be_published 
    unless post.try(:published) 
     self.errors.add(:base, "you can add comments only to published posts") 
    end 
    end 
end 

未公開の投稿にコメントを追加することを許可したくないと思います。上記のコードはそれを達成するはずです。

+2

[Object#try](http://api.rubyonrails.org/classes/Object.html#method-i-try)を見て、コードをちょっとしたものまで乾かしてみてください。 – x1a4

+0

あなたは 'post.try(:published)'を提案していますか?それについて知りませんでしたが、確かにそれをより明確にしています、ありがとう。 –

+1

ActiveSupportには、あまりよく書かれていなくても、[かなり有用なもの](http://guides.rubyonrails.org/active_support_core_extensions.html)があります。 – x1a4