Новый ответ.
Я посмотрел на вашу проблему и выяснил, что accepts_nested_attributes_for [ПРИМЕЧАНИЕ ссылка для рельсов 6, но такая же, как и для рельсов 5], ожидает дополнительные параметры. Одним из которых является reject_if
, это означает, что вы можете передать процедуру, и если она вернет false, вложенная запись не будет сохранена.
Так что, в вашем случае, вы можете сделать следующее
# app/models/note.rb
class Note < ApplicationRecord
belongs_to :comment, optional: true
end
# app/models/comment.rb
class Comment < ApplicationRecord
has_one :note, dependent: :destroy
accepts_nested_attributes_for :note, reject_if: proc { |attributes| attributes['text'].blank? }
end
Обратите внимание, что,
accepts_nested_attributes_for :note, reject_if: proc { |attributes| attributes['text'].blank? }
, который вернет false, если текст заметки будет пустым, и, в свою очередь, избегайте сохранения пустой записи заметки.
У меня был быстрый тест, и это работает в моем приложении rails 5.2. \ o /
Вы можете обратиться к моему приложению с минимальным количеством рельсов на github, если необходимо: sameera207 / so-question-58599317
Первоначальный ответ, не работает
Если предположить, что это рельсы 5, попробуйте :inverse_of
ОБНОВЛЕНИЕ: optional: true
добавлено после комментария OP
class Note < ApplicationRecord
belongs_to :comment, inverse_of: :notes, , optional: true
validates :text, presence: true
class Comment < ApplicationRecord
...
has_one :note, dependent: :destroy, inverse_of: :comment
accepts_nested_attributes_for :note
Это очень хорошая статья о: inverse_of , в которой говорится о accepts_nested_attributes_for
, и я думаю, что у вас проблема