Rails5でnested attribute使うときは気をつけろ
Rails5はモデルまわりの変更が多い気がする。
やりたかったのは、以下のモデルで
class Report < ApplicationRecord has_one :operator accepts_nested_attributes_for :operator, allow_destroy: true end class Operator < ApplicationRecord belongs_to :report end
こんな感じでviewで保存すると、
<%= f.fields_for :operator, @report.operator || @report.build_operator do |of| %> <%= render partial: "operator_form", locals: {of: of } %> <% end %>
なぜかバリデーションエラーでDBに保存できなくなる問題。
いや、StrongParameterちゃんと書いてるし、パラメータちゃんと受け取ってるやん・・・。
解決策は、belongs_toにoptionalでtrueを宣言してあげる。
rails5ではデフォルトでfalseになってしまってるみたい。なんなんそれ・・・。
class Operator < ApplicationRecord belongs_to :report, optional: true end