2016-04-07 14 views
2

Durum ve şehir özelliklerine sahip Kullanıcı modelinde bir raylı uygulamasına sahibim.
Belirli bir eyalet ve ülkenin şehirlerini almak için bir mücevher kullanıyorum.
Kullanıcı tarafından seçilen şehir, kullanıcı tarafından seçilen durum için şehirler listesinde değilse, kaydolurken kaydolma ve gösterme hatasına izin vermemesini istiyorum.Raylar, model niteliğini başka bir özelliğin değerine göre doğrular

 
    validates :state, presence: true, inclusion: { in: CS.states(:in).keys.collect{|x| x.to_s } } 
    validates :city, presence: true, inclusion: { in: CS.cities((:state).to_sym, :in) } 

Bu kodu user.rb modelinde yazdım ancak çalışmıyor.
:state, "state" özniteliği için kullanıcı tarafından gönderilen değere atıfta bulunmalıdır, ancak bunun burada çalışmadığını düşünmüyorum. Kullanıcı tarafından verilen durum değerini CS.cities() işlevine iletmek istiyorum. Bunu nasıl düzeltirim?

cevap

1

Geçerli kullanıcı örneğini alan bir proc veya lambda nesnesi kullanabilirsiniz. Bu örneği devlet için sorabilirsiniz. Proc veya lambda, geçerli tüm şehirlerle sayılabilir.

rails v3.2 api uyarlanmıştır:

validates :city, presence: true, inclusion: { :in => lambda{ |user| CS.cities(user.state.to_sym, :in) }} 
0
Sen before_save filtresi ile yapabilirsiniz

:

:before_save :check_city_state 

def check_city_state 
unless CS.cities((:state).to_sym).include?(self.city) 
    self.errors.add(:city, "select city within the selected state.") 
    return 
end 
end 
İlgili konular