9

Bir çocuk modelinin bir polimorfik ilişkiye aykırı özniteliğinin benzersizliğini doğrulamak mümkün mü?Rails AR validates_uniqueness_of polimorfik ilişkiye karşı

class Field < ActiveRecord::Base 
    belongs_to :fieldable, :polymorphic => :true 
    validates_uniqueness_of :name, :scope => :fieldable_id 
end 

Birçok Fields sahip birkaç diğer modeller (Sayfalar, Öğeleri) vardır:

Mesela ben fieldable aittir field adında bir modeli var. Yani istediğim, alan adının ana modele yönelik benzersizliğini doğrulamaktır, ancak sorun, bir Page ve bir Öğenin aynı kimlik numarasını paylaşması, doğrulamaların yapılmaması gerektiğinde başarısız olmasına neden olmasıdır.

Sadece bunu yanlış mı yapıyorum yoksa bunu yapmanın daha iyi bir yolu var mı? Bir itibariyle

class Field < ActiveRecord::Base 
    belongs_to :fieldable, :polymorphic => :true 
    validates_uniqueness_of :fieldable_id, :scope => [:fieldable_id, :fieldable_type], :message => 'cannot be duplicated' 
end 

: doğrulama eklemek Ayrıca varsayılan mesaj geçersiz veya kapsamı kullanmak için bir mesaj ekleyebilirsiniz

class Field < ActiveRecord::Base 
    belongs_to :fieldable, :polymorphic => :true 
    validates_uniqueness_of :name, :scope => [:fieldable_id, :fieldable_type] 
end 

cevap

20

Sadece fieldable türünü içerecek şekilde kapsamını genişletmek Bonus Eğer en.yml gidin ve girerseniz:

activerecord: 
    attributes: 
    field: 
     fieldable_id: 'Field' 

sen varsayılan yerine gidiyoruz 'sub ject 'bu raylar, burada belirttiğiniz ile birlikte hatalara eklenir. Yani: Fieldable Id has been already taken ya da öyleyse, şu anlama gelir:

Field cannot be duplicated 
+1

Teşekkür ederiz. Nasıl olduğunu bildiğiniz zaman basitler :) – aaronrussell