2010-11-12 40 views
8

Doğrulama iletisinde geçerli bir değer görmek istiyorum. SonuçRaylar doğrulama iletisini geçersiz kılar

validates_uniqueness_of :event, :scope => :user_id 

: "Başlık zaten alınmış olan" istediğim:

i bu şekilde yapmak çalışıyorum "Olay # {olay} zaten # {user} tarafından alınmıştır" topuz çalışmıyor: ActiveRecord itibaren

validates_uniqueness_of :event, :scope => :user_id, :message=> lambda { |e| "#{e.event} already has been taken by #{e.user}"} 
+0

Ben varsayalım: Ben "Süperstar !!!" gibi noktalama bir kullanıcı adı eklemeye çalışırsanız, bu gibi bir şey olacaktır? Örneğin, –

+0

. gerçek projede değil – murato

cevap

11

:

validates_uniqueness_of :event, :scope => :user_id, :message=>"#{self.event} already has been taken by #{self.user}" 
+1

'a bir hata getiriyor '. Çalışır, ancak {{value}} – murato

+0

yazmanız gerekir. Teşekkür ederim, ancak '% {model}', model isminin yerine, yalnızca ilk harfi büyük harfle ayrılmış, alan-ayrılmış bir model adı çıkarmanın bir yolu var mı? yani. RocketScience Rocketscience olarak çıktı, ama benim enterpolasyonumda '% {model}' i kullanırken Rocket Science ya da roket bilimi ile tatmin olurdum. – mkelley33

5

bir lambda kullanmak Kaynak kodu comment:

değerler: modeli: nitelik ve : sayımı kullanılabilir geçerlidir: Değer her zaman interpolasyon değeri için kullanılabilir. Çoğullaştırma için kullanılabilir.

Yani basitçe aslında Raylar 3.x o ne% {{value}} ne de {{value}} ancak% {value} olduğunu

validates_uniqueness_of :event, :scope => :user_id, 
         :message=>"{{value}} is already taken" 
+0

Bu, Rails4 –

5

Well gibi mesajınızı yazabilirsiniz.

6

Bir lambda kullanın, ancak en azından Rails'in daha yeni sürümlerinde, ActiveRecord bu lambdaya iki parametreyi iletmeye çalışacaktır ve bunların hesaba katılması gerekir. Daha basit bir örneği kullanarak, bir kullanıcı adı sağlamak istiyoruz diyelim sadece alfanümerik karakterler içeriyor:

validates_format_of :username, :with => /^[a-z0-9]+$/i, 
    :message => lambda{|x,y| "must be alphanumeric, but was #{y[:value]}"} 

lambda geçirilen ilk parametre bir robot anlatmak için çok iyi olurdu garip değil bu yüzden küçük sembolün ne yanlış giden: yukarıdaki gösterimde tam olarak anlayamadık

:"activerecord.errors.models.user.attributes.username.invalid" 

(durumda, semboller sadece harfler, sayılar daha içerirler ve alt Ama yaparsanız, çevrelerindeki çünkü aksi takdirde tırnak koymak olabilir. :activerecord.errors, bir sembol çağrısında .errors yöntemini çağırmaya çalışıyor gibi görünüyor ed :activerecord.)

İkinci parametre Hata yanıtı "bayağı" size yardımcı olacaktır alanları ile bir karma içeriyor. Başka activemodel sınıftır 'olayı'

{ 
    :model=>"User", 
    :attribute=>"Username", 
    :value=>"Superstar!!!" 
} 
İlgili konular