Witam.
Jestem chyba zbyt zmęczony żeby dalej szukać rozwiązania i/lub obejścia czy wyjaśnienia więc piszę w nadziei, że ktoś przed takim problemem też stanął.
Do rzeczy…
Konto mamy sobie :
class Account < ActiveRecord::Base
belongs_to :company
accepts_nested_attributes_for :company
end
Dla konta firmę…
class Company < ActiveRecord::Base
has_one :account
belongs_to :city
accepts_nested_attributes_for :city
end
A firma posiada sobie miasto
class City < ActiveRecord::Base
has_one :company
validates_uniqueness_of :name
end
Teraz tak… gdy skasuję (validates_uniqueness_of :name) w bazie dostaję
1, Katowice
2, Katowice
3, Katowice
Raczej niepożądana sprawa. Gdy zostawiam validację unikatowości, form nie chce mi się wysłać… bo nazwa nie jest unikatowa… oczywiste. Dlaczego więc ten mechanizm sam nie odkrywa, że w bazie istnieje dany wpis i automatycznie nie przypisuje go dla tego rekordu? Nie za bardzo wiem jak to przeciążyć, miałbym gdzieś w modelu Account sprawdzać już czy city.name istnieje i… jakoś zmieniać mu flagę @new_record na false? Miło by było ale nie dałem rady tego tak obejść.
Brak mi czegoś w modelu?
jeszcze przytoczę mój controller
[code] def add_account
@given_action = “create_account”
@model_form = Account.new
@model_form.build_company
@model_form.build_company.build_city
end
#dla samego dodania
def create_account
if request.post?
@model_form = Account.new(params[:account])
@model_form.password_generate
if @model_form.save
redirect_to :controller => :admin, :action => :accounts
else
#bla bla
end
end[/code]
a z desperacji i widok
[code]- form_for @model_form, :url => { :action => @given_action , :controller => ‘admin’} do |f|
- f.fields_for :company do |o|
- o.fields_for :city do |x|
= x.text_field :name
= x.label :name, City.human_attribute_name(:name)[/code]
… coś w ten deseń znalazłem tutaj https://rails.lighthouseapp.com/projects/8994/tickets/2160-nested_attributes-validates_uniqueness_of-fails ale też nie jestem do końca pewny czy to mój problem… ponieważ oni piszą o pomijaniu przez railsy tej walidacji, a u mnie nie o to chodzi…
- o.fields_for :city do |x|
ja używam 2.3.5
@update: czyżbym musiał tutaj zrobić powiązania polimorficzne? Troszkę w AR się gubię…