Ожидал, получил String

Я все еще довольно новичок в Rails, так что я мог бы пропустить какую-то довольно серьезную вещь здесь, и это легко исправить, или, возможно, часть, которую я просто еще не изучал.

Я создаю тур в обычной форме. Форма имеет много полей, но вопрос, о котором у меня возникают проблемы, связан с моим collection_select. Я пытаюсь показать туры, связанные с этим городом, на страницах городов.

Вот ошибка, которую я получаю, которая появляется после сохранения тура.

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

модели /city.rb

class City < ActiveRecord::Base
    has_many :cities
end

модели /tour.rb

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

У меня есть отдельные контроллеры для городов и туров. Довольно простые строительные леса, хотя я добавил:city в params.require(:tour).permit(.

просмотров / туры /_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 %>

Форма отлично отображает все города, но обновление тура с городом дает мне ту ошибку, которую я обнаружил.

В качестве дополнительного вопроса на потом я бы хотел показать все туры, связанные с городом. Например, посещение city/1 показывает туры для этого города.

Спасибо!

2 ответа

Решение

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

Это: город здесь строка? Кроме того, город has_many: отношения городов кажутся странными.

Кроме того, если я понимаю намерение здесь (кажется, что концертные туры?), То отношение "многие ко многим" может быть более подходящим с использованием таблицы соединений (: id,: user_id,: city_id) и создания отношения has_many_through.

Вы можете попробовать это:

<%= f.select :tour, City.all.map{|c| [c.city, c.id] }, {include_blank: true} %>
Другие вопросы по тегам