2017-07-19 9 views
0

私はこのpostに従っており、オブジェクトの作成前に検証メソッドを追加しようとしています。私は続けるundefined method 'video' for #<Video:0xbe430a0>私はここでこの記事を読んでいるhttp://ruby-for-beginners.rubymonstas.org/ルビーの仕組みを知っているが、なぜこのエラーが出るのか理解できない。新しいオブジェクトを作成する検証で、 `未定義のメソッド` ruby​​を読み込みますか?

http://api.rubyonrails.org/v5.1/classes/ActiveModel/Validations/ClassMethods.html#method-i-validate

私はRubyのオブジェクトに新しい呼び出すと、私はundefined methodを取得しないために、ビデオ変数に実行する必要が何をすべきか、検証して、それを保存する場合は?

class Video < ApplicationRecord 

    validate :video_count_within_limit, on: :create 

    def video_count_within_limit 
    if video(:reload).count >= 9 
     errors.add(:base, "Exceeded video limit of 9 videos") 
    end 
    end 
+0

あなたが何しようとしていることは、あなたがフォローしているポストから同じ構造を複製した場合は、あなたのビデオのモデルも 'belongs_toのを持っている必要がありself' – Pavan

+0

'と 'video'を交換してみてください:some_model' そして、特定のモデルのビデオの数が 'self.some_model.video(:reload).count'(ただし' self'部分は必要ありません)でチェックします。 あなたが今やっていることはあまり意味がありません。 – matija

+0

私はそれを1つのモデルでやろうとしていたことを理解しています。ビデオモデルだけを使用する別の方法はありますか?ありがとうございましたpavan前に私は運がないとそれを試みました。 –

答えて

1

video方法は、実際にあなたのモデルに存在し、ポストに基づいていないとして、あなたはそれが実際にあなただけのシンプルなselfvideoを置き換える必要があります参照です従っています。このような場合:self.reload.count> = 9 errors.add(:base、 "9ビデオのビデオ制限を超えました")endこれがうまくいくかどうか教えてください!よろしく


新しい回答:あなたがフォローしているポストに

、彼らは協会としてvideosをチェックして、そのカウントが大きく9.

次に、どのようにそれが動作が実際にあるかどうかをチェックしていますvideosを参照するメインオブジェクトはDBには格納されませんが、それはvideosアソシエーションがあるので、その長さ/カウントを確認できます。

あなたの主なオブジェクト(Video)でそれを実行しようとしている場合は、永続化されずにインスタンス化されただけでなく、検証メソッドが呼び出されるというエラーが表示されますcreateの前。

これを達成しようとしていますが、参照モデルの作成を検証するためにのみ論理的ですが、保存できないものは9ビデオを超えています。

希望は十分ですか?

よろしく

+0

こんにちは。それは私に 'ActiveRecord :: RecordNotFound in VideosController#create IDを持たないビデオを見つけることができませんでした'私は実際に何を意味するか分からない、私はID:1とid:2のデータベースに2つのビデオがありますか? –

+0

#createアクションでこれを使用しているので、あなたのビデオはまだ保存されていないと思います。あなたが間違った方向にいるように見えます。実際にフォローしている投稿が参考になる動画を実際にチェックしていれば、それは当てはまります。インスタンス化されたオブジェクトの 'count'を間違ってチェックしようとしています! – zauzaj

+0

私はそれがユーザーまたは特定のモデルにある場合は違いを理解していない、カウントは、データベースのレコードの数をカウントするべきではない?したがって、検証を実行してエラーを返す前に作成しますか? –

関連する問題