Проверяет присутствие в Rails с неработающей Globalize

Я работаю над проектом rails с globalize, где у меня есть модель под названием Product, например:

class Product < ActiveRecord::Base

  translates :name, :description

  validates :name, presence: true

end

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

Product.create!
   (0.3ms)  BEGIN
   (0.2ms)  ROLLBACK
ActiveRecord::RecordInvalid: Validation failed: Name can't be blank

После того, как продукт создан и имеет переводы, при попытке обновления для другой локали валидаторы не проверяются, например:

irb(main):009:0> p.update_attributes(name: "", locale: :es)
   (0.2ms)  BEGIN
   (0.1ms)  COMMIT
=> true

Любые мысли о том, как это может быть достигнуто?


person Juan Rodriguez    schedule 12.01.2016    source источник


Ответы (2)


In

p.update_attributes(name: "", locale: :es)

вы устанавливаете атрибут имени на ""

Однако в Product.create! вы не передаете значение «имя». Его можно использовать как Product.create(name: "")!, если хотите.

person rohan    schedule 12.01.2016
comment
В том-то и проблема, что update_attributes должен завершиться ошибкой с пустым именем. Product.create работает нормально, без имени не работает - person Juan Rodriguez; 12.01.2016
comment
проверяет :name, присутствие: true только гарантирует, что оно не равно нулю. ноль отличается от - person rohan; 12.01.2016
comment
Project.create будет работать, поскольку он создает только экземпляр объекта, но не Project.create! поскольку проверки происходят, когда вы пытаетесь сохранить экземпляр объекта. ! пытается сделать это - person rohan; 12.01.2016
comment
вы ошибаетесь, проверьте это - person Juan Rodriguez; 12.01.2016
comment
Да, я был неправ. Попытка копнуть глубже, и да, проверка в вашем случае не удалась. Было бы больше смысла, если бы вы использовали update_attribute(name:) вместо update_attributes(name:, locale: :es), поскольку первый пропускает проверки. см. api.rubyonrails.org/classes/ActiveRecord/ . Дам вам знать, если я найду ответ. - person rohan; 12.01.2016

попробуй это

class Product < ActiveRecord::Base

  translates :name, :description

  validates :name, presence: true

  class Translation
    # define translation validations here
    validates :name, presence: true
  end
end
person Rajesh Sharma    schedule 13.01.2016