Recently I've been working with forms and Active Record a lot. I was struggling with associating an object with another, in a many to many relationship. I thought there was something wrong with my form syntax. Turns out I had a typo in my Model associations. Either way I decided to write a tutorial on how to assign multiple objects to another using
For starter's here are my relationships. My typo was causing lots of issues, so start off by making sure your associations are correct.
class Person has_many :pet_owners has_many :pets, through: :pet_owners end class PetOwner belongs_to :pet belongs_to :owners end class Pets has_many :pet_owners has_many :persons, through: :pet_owners end
Once your associations are working correctly we can move on to assigning pets to their people. We'll be using a form that allows a Person to be assigned multiple dogs.
We start by building our form in views.
# /app/views/_form.html.erb <%= form_for @person do |f| %> <%= f.label "First Name: " %> <%= f.text_field :first_name %> <%= f.label "Pets: " %> <%= f.collection_check_boxes :dog_ids, Dog.all, :id, :name %> <%= f.submit %> <% end %> # /app/controllers/persons_controller.rb def person_params params.require(:person).permit(:first_name, dog_ids:) end
A checkbox collection allows our user to select multiple dogs by checking a box, next to the dogs name. Our form will grab the
dog_id assigned to that dog instance and shovel that into our array located at
Once ActiveRecord see's the collection of dogs objects it will assign those dogs to the person filling out the form.
This is a super useful method for assigning multiple objects quickly. I will be using it for a project that I'm currently working on. If you have any questions, or suggestions please leave some comments.