Rails4 Strong Parametersによって多段saveがエラーになった話

Rails4でStrong Parametersが導入されて大抵はpermitとかやれば解決できるんだけどそれだと足りなかったときの話


BookはAuthorを一人だけもつけれど、belongs_toにしたくないとき(Bookにauthor_idをもたせたくない?)

class Author < ActiveRecord::Base
  has_many :author_books
  has_many :books, through: :author_books
end

class Book < ActiveRecord::Base
  has_one :author_books
  has_one :author, through: :author_book
end

class AuthorBook < ActiveRecord::Base
end

こんな感じになる。このときあるBookを生成してsaveできたらそのauthorも設定するようにしたいとき、

book = Book.new
book.author = Author.first
book.save

こういう書きかたがあるが、これはStrong Parameters周りでエラーを起こす。

対処は

class Book < ActiveRecord::Base
  has_one :author_books
  has_one :author, through: :author_book
  accepts_nested_attributes_for :author
end

とすること