witam
jak moge sprawdzic czy powiazany model istnieje, np mam w jakimś modelu
belongs_to :user
validates_associated :user, :unless => Proc.new { |p| p.user_id.nil? }
pozwala zapisać model nawet jeśli podam id nieistniejącego usera, dlaczego ?
witam
jak moge sprawdzic czy powiazany model istnieje, np mam w jakimś modelu
belongs_to :user
validates_associated :user, :unless => Proc.new { |p| p.user_id.nil? }
pozwala zapisać model nawet jeśli podam id nieistniejącego usera, dlaczego ?
validates_presence_of :user
?
Dzięki za oba rozwiązania. to z validates_presence_of okazało się wystarczające
Chciałbym pozostawic walidacje przypisanych modeli w modelu nadrzędnym, ale czasem chciałbym cos zapisać do modelu narzędnego pomijając te walidacje (bo na początku nie ma przypisanych modeli). Czy to możliwe ?
Wszystko jest możliwe przy walidacji customowym blokiem/metodą
hmm, ale w modelu nie mam dostępu do informacji w jakim kontrolerze zapis został wywołany więc czy sprawdzać czy nie
Jeśli wywołasz save przekazując false jako argument ( save(false) ) to rekord zostanie zapisany z pominięciem walidacji.
to wiem, ale ja nie chciałbym pomijać walidacji rekordu samego w sobie, tylko przypisanych do niego rekordów. Np.
[code=ruby]class Survey < ActiveRecord::Base
has_many :pages, :dependent => :destroy, :order => :position
validates_presence_of :title
validates_length_of :title, :within => TITLE_LENGTH, :unless => Proc.new {|s| s.title.blank? }
validates_presence_of :pages, :on => :update
validates_associated :pages, :on => :update[/code]
Żeby przy pewnej akcji zwalidowało objekt survey ale nie walidowało pages. Nie używając :allow_blank => true bo ogólnie to chciałbym żeby walidowało, tylko czasem wyjątek.
Narazie znalazłem takiego niezbyt pięknego hacka, odp 1
i trochę bardziej eleganckie rozwiązanie
O, w komentarzach jest dobry przykład jak to powinno wyglądać.
Jest ktoś chętny do napisania odpowiedniego plug-inu?
Jeśli nie będzie nikogo to spróbuję sam się za to zabrać. Ot, takie poważniejsze “hello world” będzie
v = Venue.new
v.validations_to_skip! :country, :region, :city, :zip
v.name = "A Venue"
v.user = some_user
v.save
validates_presence_of :name
validates_presence_of :country_id, :skippable => true
validates_presence_of :region_id, :skippable => true
validates_presence_of :city, :skippable => true
validates_presence_of :zip, :skippable => true
coś takiego to moim skromnym zdaniem w railsach powinno sie znaleźć, ale jako plugin też było by super to z przykładu sprawdziłem i działa ok