Avoiding the TypeError: can’t cast Array to string
Recently, I was inserting nested attribute checkboxes using
Formtastic and Cocoon and was cruising along with all my other nested forms partials until I got a dreaded TypeError: can’t cast Array to string.
Below is the pertinent code pattern I used that worked for other parts of my nested form:
Code for the form view using Formtastic
= semantic_form_for @person, url: {action: "update_something_action" } do |f|
%h4 Papers
#papers
  = f.semantic_fields_for :papers do |paper|
    = render 'paper_fields', :f => paper
    .links
      = link_to_add_association 'Add paper', f, :papersCode for the form partial _paper_fields.html.haml using Formtastic and Cocoon
.nested-fields
  = f.inputs :name => "Paper" do
  = f.input :paper_title
  = f.input :paper_year
  = f.input :good_paper, as: :check_boxes, collection: ["Yes", "No"]
  = link_to_remove_association "Remove paper", fThe code for the form view and form partial above worked except for the check boxes which kept giving the TypeError: can’t cast Array to string.
Below is how I fixed this.
Step 1: Setup the parent model, Person, correctly
class Person < ActiveRecord::Base
  has_many :papers, dependent: :destroy
  accepts_nested_attributes_for :papers, allow_destroy: true
endStep 2: Serialize good_paper in Paper.rb
You serialize the attribute you want checkboxes for as follows:
class Paper < ActiveRecord::Base
  belongs_to :person
  serialize :citation_status, Array
endStep 3: Setup FactoryGirl correctly
In spec/factories/paper.rb, we have:
FactoryGirl.define do
  factory :paper do
  paper_title "MyText"
  paper_year "MyString"
  citation_status ["",""]
  association :person
  end
endAnd that’s it, your Rails 4 application nested attribute checkboxes should now be working correctly with Cocoon and Formtastic.
