yaroslav / russian

Russian language support for Ruby and Rails | Поддержка русского языка для Ruby и Rails
MIT License
475 stars 127 forks source link

Проблема с has_many :through и валидацией #3

Closed valodzka closed 15 years ago

valodzka commented 15 years ago

Модели:

Address: has_many :delivery_settings, :through => :delivery_address
DeliverySetting: has_many :addresses, :through => :delivery_addresses
DeliveryAddress: belongs_to :delivery_setting,  belongs_to :address,  validates_uniqueness_of :address_id, :scope => :delivery_setting_id

При попытке добавить вторую связь (которая не проходит валидацию):

can't convert ActiveRecord::Error into String
 vendor/plugins/russian/lib/russian/active_record_ext/custom_error_message.rb:47:in `+'

@errors выглядят так: {"address_id"=>[#<ActiveRecord::Error:0x26d39e8 @type=:taken, @message=:taken, @options={:value=>6}, @attribute=:address_id, @base=#<DeliveryAddress id: nil, address_id: 6, delivery_setting_id: 4>>]}

valodzka commented 15 years ago

добавление

elsif msg.kind_of? ActiveRecord::Error
    full_messages << msg.full_message

эту проблему решает

yaroslav commented 15 years ago

@valodzka а добавление куда? ты имеешь в виду что для Rails < 2.3.4 возникают ошибки (custom_error_message.rb L89 и ниже)?

Пришли патч плс если уже разобрался что к чему

valodzka commented 15 years ago

Проблема, насколько я понял, возникает потому что ошибки могут быть вложенными, чего кастомный full_messages не учитывает. Патч:

- vendor/plugins/russian/lib/russian/active_record_ext/custom_error_message.rb -
index 3b480c3..dbe1cd3 100644
@@ -41,13 +41,16 @@ module ActiveRecord
             full_messages << msg
           elsif msg =~ /^\^/
             full_messages << msg[1..-1]
+     elsif msg.kind_of? ActiveRecord::Error
+       full_messages << msg.full_message
      else
        full_messages << @base.class.human_attribute_name(attr) + " " + msg
      end
    end
  end
yaroslav commented 15 years ago

Спасибо, пушнул в мастер

Проверь что все ок, отпиши — если да, сделаю релиз

valodzka commented 15 years ago

Всё ок, только это не для Rails < 2.3.4, это именно 2.3.4 offtop: Я делал локализацию стандартного рэйлсвого time_zone_select, возможно стоит добавить в Russian: http://gist.github.com/219923

yaroslav commented 15 years ago

Штука полезная, как раз нужна :) Попробуй оформить плагин для перевода отдельно? Можно будет его пропихнуть или в Rails Core, или в плагин на github.com/rails или вроде того.

valodzka commented 15 years ago

Сделаю когда-нибудь, хотя кода там на полтора метода, IMHO логичнее с общей локализацией