2017-10-26 6 views
0

ビルドとリスティングの2つのモデルがあります。リストモデルはBuildingに属します。私たちは、特定の時間におけるアクティブなリスティングレコードの数に応じてリスティングで作成できるレコードの数を制限しようとしています。 Listing.active.countはRails 5.1別のオブジェクトに依存するオブジェクトの検証

undefined method `>=' for #<Array:0x007f05ec4db388> 

、私たちは、ビル内の整数列が限度として使用された場合の検証を使用しようとしましたが、それは次のようなエラーが作業してきていなかったX.以上になることはありません

Class Listing < Application Record 
    validates :validate_listing_count, on :create 

    private 
    def validate_listing_count 
     errors.add(:base, "You have too many active listings, please destroy a listing or contact your Account Manager if you need more listings") unless too_many_siblings? 
    end 

    def active_siblings 
     building.listings.where(active: true) 
    end 

    def too_many_siblings? 
     active_siblings.select { |sib| sib.id != id } >= (building.listing_limit - 1) 
    end 
end 

答えて

1

active_siblings.select Listing.rb配列を返し、あなたは、配列内の項目数をしたいです。これを試してみてください:

def too_many_siblings? 
    active_siblings.select { |sib| sib.id != id }.count >= (building.listing_limit - 1) 
end 

あなたはvalidate_listing_countifunlessを変更することがありでこれは、問題の一部ではありませんでした。私はそれが問題のあなたの記述に基づいてより論理的な感覚を作ると思う。

+0

私はそれを試みましたが、同じエラーが発生しました。私の大学は、彼がこれを間違った方法で近づいてきたと考えています。 –

+1

もう一度やり直してください。私のコードは正しくないかもしれませんが、そのエラーを生成すべきではありません。あなたのコードに '> = '演算子がありますか?ところで、テスト用にRailsコンソールを使用している場合は、新しいモデルコードがロードされるように、モデルを変更するたびにコンソールを終了してから再度開く必要があります。 –

+0

okだから私たちはあなたの更新されたコードを見て、それは反対に動作している。現時点でアクティブなレコードが多すぎると言っているため、新しいレコードや既存のレコードを更新/作成することはできません。 –

関連する問題