Walidacja zależna od nested attributes

W modelu jednostki mam relację jeden do wielu z tłumaczeniami (ActiveRecord) w modelu jednostek użyłem nested attributes na tabele tłumaczeń. Założenie jest takie, że przynajmniej jedno tłumaczenie musi być (dla domyślnego języka), próbowałem dostać się do tłumaczeń przed zapisaniem rekordu (before_save), ale w liście metod nie widzę czegoś w stylu translations_attributes, jest tylko translations_attributes=.

[code=ruby]class Unit < ActiveRecord::Base
has_many :translations, class_name: ‘UnitTranslation’

accepts_nested_attributes_for :translations,
:reject_if => proc { |attributes| attributes[‘name’].blank? or
attributes[‘abbr’].blank? }
before_save :default_translation?

private

def default_translation?

end
end[/code]
Jednym z pomysłów było przejrzenie tabeli translations (UnitTranslation), ale przed zapisaniem jest ona pusta.

OT: Nie lepiej użyć jakiegoś gotowego rozwiązania? Globalize?

Globalize pomimo że jest jednym z lepszych gemów do tłumaczenia (tak piszą) to mi osobiście nie przypadł do gustu. Poza tym ten gem nie oferuje czegoś takie jak wymaganie tłumaczenia dla domyślnego języka. Najwyraźniej trzeba będzie samemu napisać kod oferujący tą funkcjonalność.

Jak wyforkujesz i napiszesz taki ficzer (z dobrym przykryciem testami) to z przyjemnością wciągnę :slight_smile:
(jestem jednym z maintainerów globalize3)

A nie da się czegoś takiego uzyskać poprzez zwykły model i następne dodanie migracji do globalize3

class TranslatePosts < ActiveRecord::Migration def self.up Post.create_translation_table!({ :title => :string, :text => :text }, { :migrate_data => true }) end def self.down Post.drop_translation_table! :migrate_data => true end end
Na Post[:string] w zwykłym modelu dało by się validate_presence.

Powinno zadziałać. ;p