Search code examples
ruby-on-railsruby-on-rails-4grouped-collection-select

expected, got String


I'm still pretty new to Rails so I could be missing some pretty major here and that's easy to fix or maybe a piece that I just haven't studied yet.

I'm creating a tour in regular form. The form has many fields but the one in question and where I'm having issues is with my collection_select. What I'm trying to do is display the tours associated to that city within the cities pages.

Here's the error that I'm getting which appears after I save the tour.

City(#70179438153960) expected, got String(#70179401165880)

models/city.rb

class City < ActiveRecord::Base
    has_many :cities
end

models/tour.rb

class Tour < ActiveRecord::Base
  belongs_to :user
  belongs_to :city
end

I have separate controllers for cities and tours. Pretty basic scaffolding although I did add :city to the params.require(:tour).permit(.

views/tours/_form.html.erb

  <%= simple_form_for(@tour) do |f| %>

    <div class="inputs">
        <%= f.input :company, label: "Company", input_html: { class: 'form-control' } %>
...
       <%= collection_select :tour, :city, City.all, :id, :city, {:include_blank => true } %>
    </div>

...
  <% end %>

The form displays all the cities perfectly fine but updating the tour with a city gives me that error I showed up.

As an extra question for later, I'd then like to display all the tours associated to the city. For example visiting city/1 would shows the tours for that city.

Thanks!


Solution

  • <%= collection_select :tour, :city, City.all, :id, :city, {:include_blank => true } %>

    Is :city here a string? Also the City has_many :cities relationship seems odd.

    Also, if I am understanding the intent here (seems like concert tours?) then a many to many relationship might be more appropriate using a join table (:id, :user_id, :city_id) and making a has_many_through relationship.