Ожидал, получил 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} %>