2016-06-24 6 views
0

私はモデルArticlename:string description:text number_of_comments:integer open_for_comments:booleanを持っています。Rails before_updateはトリガーしません

5つ以上のコメントがある場合にコメントする可能性をブロックしたいが、機能しません。

私が記事open_for_commentsを作成するときは、常にnilです。それは、それが誘発しないことを意味します。

誰でも手助けできますか?

は、ここでは、コードあなたがopen_for_commentsのデフォルト値がnilになるだろう新しい記事を作成している

class Article < ActiveRecord::Base 

    before_update :close_comments, if: :more_than_five_comments? 

    def more_than_five_comments? 
    self.number_of_comments >5 ? true : false 
    end 

    def close_comments 
    self.open_for_comments = false 
    end 
end 
+0

コメントモデルがありますか?もしそうなら、それは 'Article'に関連していますか? 'Article has_many:comments'の場合は、' open_for_comments'のためのメソッドを持つ必要があり、 'number_of_comments'カウンタか' open_for_comments'のブール値は必要ありません。 – tamouse

+0

**記事を作成するとき、open_for_commentsは常にNILです。つまり、トリガーしないことを意味します** **記事を作成すると、before_updateコールバックは既存のレコードでのみ機能するため、**起動されません**。あなたはbefore_createかbefore_saveのどちらかを見たいかもしれません。どちらにしてもあなたのニーズに合っています。 – hypern

答えて

1

です。

移行を追加してopen_for_commentsのデフォルトをtrueに設定した場合、Articleが最初に作成されたときは、Nilではなくtrueに設定されます。

私はそれが今ここに設定されている方法を読ん方法は、あなたが記事を作成するときに何が起こっているかである:

Article.create(name: "New Article, description: "Example description") 
    -> <Article id: 1, name: "New Article", description: "Example description:, number_of_comments: nil, open_for_comments: nil > # unless within your migrations you have them set to a default value 

ので、あなたは基本的にnil > 5 ? true : false

移行を言って、あなたのbefore_updateを呼び出しているされている場合:

言われているように、これはそれを行うための「難しい」方法ではありません。コメントモデルがある場合は、関連付けを使用する必要があります。

+0

私は持っていると思う。あなたの助けをたくさんありがとう:) – elmuzyk

+0

問題はありません。これはあなたが探していた答えでしたか? –

関連する問題