Условная ассоциация с вложенным полем формы не проверяется должным образом - PullRequest
1 голос
/ 28 апреля 2019

Rails 6.0.0.beta3 Рубин 2.6.1

У меня есть две модельные ассоциации между Item и Variant, как показано ниже:

class Item < ApplicationRecord
...
  has_many :variants
  accepts_nested_attributes_for :variants,
                                reject_if: :all_blank,
                                allow_destroy: true

end

и модель варианта, как показано ниже:

class Variant < ApplicationRecord
  belongs_to :item, -> { where(kind: :article) }
end

Как и выше, у нас есть условное отношение для belongs_to, которое зависит от Item поля kind, чтобы иметь значение article.

Задача : При создании item, который имеет вложенные поля формы для variant, он повышает валидацию, как и ожидалось для kind: :article, но повышает для всех других значений kind, как kind: :novel. На консоли рельсов я пытался вручную создать

item = Item.create(kind: :article)
item.variants.create

...

item = Item.create(kind: :novel)
item.variants.create
it raises validation error 'should be of kind: :article only'

работает в консоли, но не с вложенными полями форм. Другое связанное известное дело проблемы: https://github.com/rails/rails/issues/25198

1 Ответ

0 голосов
/ 28 апреля 2019

Я бы рекомендовал проверить тип элемента в модели Variant вместо where в belongs_to.

, потому что в вашем случае Item.create!(kind: :novel).variants.create! вызывает ошибку (Item must exist когда я попробовал).

Кстати заинтересовался и сделал минимальное тестовое репо (https://github.com/localhostdotdev/bug/tree/belongs-to-where-and-accepts-nested-attributes) (хотя формы не имеет).

...