9

Czy można zweryfikować wyjątkowość atrybutu modelu potomnego na podstawie zależności polimorficznej?Railsy AR sprawdzają_jednostkę_w odniesieniu do zależności polimorficznej

Na przykład mam model o nazwie field należącego do fieldable:

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

mam kilka innych modeli (strony, przedmiotów), które mają wielu dziedzinach. Tak więc chcę potwierdzić unikalność nazwy pola w stosunku do modelu nadrzędnego, ale problem polega na tym, że czasami strona i element mają ten sam numer identyfikacyjny, co powoduje niepowodzenie sprawdzania poprawności, gdy nie powinny.

Czy robię to źle, czy jest lepszy sposób na zrobienie tego?

Odpowiedz

20

Wystarczy poszerzyć zakres w celu włączenia typu fieldable:

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

Dziękuję. Simples, kiedy wiesz jak :) – aaronrussell

0

Można również dodać wiadomość zastąpić domyślny komunikat lub użyj zakresu dodać walidację:

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

Jako bonus, jeśli przejdziesz do swojego en.yml, i wpisz:

activerecord: 
    attributes: 
    field: 
     fieldable_id: 'Field' 

Zamierzasz zastąpić domyślny ject, które szyny dodają do błędów z tym, który tu podałeś. Zamiast więc powiedzieć: Fieldable Id has been already taken lub tak, można powiedzieć:

Field cannot be duplicated 
Powiązane problemy