Свойство:autosave has_many ассоциаций, прерванных направляющие 2.3.4?

Прежде чем я отправлю это как ошибку команде направляющих, я хотел видеть, делаю ли я что-то не так, что может вызывать это поведение. А именно: свойство автосохранения has_many ассоциаций, кажется, не работает согласно документам.

Для ссылки вот актуальнейшая документация API: http://api.rubyonrails.org/classes/Acti … ation.html

Смотрите на раздел "One-many Example". Я копировал код там точно в тестовом приложении, и он не работает на меня. А именно, родительский объект обновляется, но дочерний объект не.

Моя схема следующие:

create_table :posts do |t|
  t.string :title

  t.timestamps
end

create_table :comments do |t|
  t.text :body
  t.integer :post_id

  t.timestamps

Мои модели следующие:

  class Post < ActiveRecord::Base
    has_many :comments, :autosave => true
  end

  class Comment < ActiveRecord::Base
    belongs_to :post
  end

В консоли я выполняю следующие команды (сообщение, и объекты комментариев уже находятся в DB в этой точке):

  post = Post.find(1)
  post.title # => "The current global position of migrating ducks"
  post.comments.first.body # => "Wow, awesome info thanks!"
  post.comments.last.body # => "Actually, your article should be named differently."

  post.title = "On the migration of ducks"

  post.comments.last.body = "Actually, your article should be named differently. [UPDATED]: You are right, thanks."

  post.save
  post.reload

Но это - то, что я получаю для вывода:

  post.title # => "On the migration of ducks"
  post.comments.last.body # => "Actually, your article should be named differently."

Далее, смотря в журналах это - единственный оператор обновления, который я вижу:

Обновление сообщения ОБНОВЛЕНИЕ (на 0,6 мс) "сообщения" УСТАНОВИЛО "updated_at" = '18.01.2010 23:32:39', "заголовок" = 'На миграции уток' ГДЕ "идентификатор" = 1

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

Вот странная часть, хотя: Если я сначала называю "post.comments", прежде чем я попытаюсь установить значение, он хорошо работает! Быть точным:

  post.title = "On the migration of ducks"

  post.comments #Note that this line was not called above
  post.comments.last.body = "Actually, your article should be named differently. [UPDATED]: You are right, thanks."

  post.save 
  post.reload

Теперь вывод дает мне корректные результаты:

  post.title # => "On the migration of ducks"
  post.comments.last.body # => "Actually, your article should be named differently. [UPDATED]: You are right, thanks."

И журналы содержат корректное обновление:

Обновление комментария ОБНОВЛЕНИЕ (на 0,3 мс) "комментирует" SET "updated_at" = '18.01.2010 23:44:43', "тело" = 'На самом деле, Ваша статья, нужно назвать по-другому. [ОБНОВЛЕННЫЙ]: Вы правы, спасибо'. ГДЕ "идентификатор" = 2

Таким образом, это действительно выглядит поврежденным мне. Я предполагаю, что это - проблема со способом, которым ссылки на объект обрабатываются, т.е. что, после того как объект является частью выделенного набора, который это сохраняет прекрасный, но не сохраняет, когда это вытягивают как отдельный объект от базы данных. Но прежде чем я отправляю это команде направляющих как ошибка, я хотел видеть, столкнулся ли кто-либо еще с этой проблемой, или если я просто делаю что-то абсолютно глупое, которое я не вижу, потому что я весь день тратил на это.

7
задан Chris Travers 14 January 2017 в 12:34
поделиться