期待,得到了String

时间:2013-11-20 21:48:42

标签: ruby-on-rails ruby-on-rails-4 grouped-collection-select

我对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 to the 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 个答案:

答案 0 :(得分:0)

你可以试试这个:

<%= f.select :tour, City.all.map{|c| [c.city, c.id] }, {include_blank: true} %>

答案 1 :(得分:0)

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

是:这里的城市是一个字符串?城市也很多:城市关系似乎很奇怪。

另外,如果我理解这里的意图(看起来像是巡回演唱会?)那么使用连接表(:id,:user_id,:city_id)并建立has_many_through关系可能更适合多对多关系。 / p>