Rails acceptpts_nested_attributes_for _destroy не работает, если ассоциации уже загружены - PullRequest
1 голос
/ 06 апреля 2011

Rails 3.0.5, похоже, не уничтожает дочерние объекты родительского объекта, используя accepts_nested_attributes_for, если дочерние объекты не загружены.Кто-нибудь знает, если это по замыслу?Это кажется немного странным для меня.Вот настройки.

class Foo < AR
  has_many :bars
  accepts_nested_attributes_for :bars, :allow_destroy => true
end

class Bar < AR
  belongs_to :foo
end

# create a Foo with 5 bars (ie. Foo.create :bars_attributes => ... )
# then fetch a foo, without its bars

f = Foo.find(1)
f.update_attributes("bars_attributes" => {"id" => "1", "_destroy" => "1"})
Foo.find(1).bars.length   # => 5

f = Foo.find(1, :include => :bars)
f.update_attributes("bars_attributes" => {"id" => "1", "_destroy" => "1"})
Foo.find(1).bars.length   # => 4

1 Ответ

1 голос
/ 02 мая 2013

Foo#bars - это has_many, поэтому он будет ожидать более 1, что означает Array.Попробуйте передать Array из Hash примерно так:

f = Foo.find(1, :include => :bars)
f.update_attributes("bars_attributes" => [{"id" => "1", "_destroy" => "1"})]
...