したがって、Rails 4 で PostgreSQL を使用して次のように設定しています。
# migration
create_table :custom_category_groups do |t|
t.string :name
t.string :content_types, array: true, default: []
end
# controller
class CustomCategoryController < ApplicationController
# ...
def update
@custom_category_group = CustomCategoryGroup.new(custom_category_group_params)
if @custom_category_group.update(custom_category_group_params)
# ...
end
end
private
def custom_category_group_params
params.require(:custom_category_group).permit(:name, content_types: [])
end
end
# view
= form_for @custom_category_group do |f|
= f.collection_check_boxes :content_types, %w(interviews testimonials blogs).map { |ct| [ ct.titleize, ct ] }, :last, :first
カスタム カテゴリ グループを保存すると、次のエラーが表示されます。
TypeError - can't cast Array
ログを見ると、次の DB ステートメントが発行されていることがわかります。
UPDATE "custom_category_groups" SET "content_types" = $1, "updated_at" = $2
WHERE "custom_category_groups"."id" = 2 [[nil, ["interviews", ""]],
["updated_at", Mon, 26 Aug 2013 12:15:53 UTC +00:00]]
ご覧のとおり、Rails はどうにかして content_types (節nil
の後の中括弧内) の適切な名前を解決できません。WHERE
本当に奇妙なこと: 単純にページをリロードしてフォームを再度送信すると (ブラウザーが尋ねたときに)、節約が機能します!????