【问题标题】:expected, got String预期,得到字符串
【发布时间】:2013-11-21 12:54:02
【问题描述】:

我对 Rails 还是很陌生,所以我可能会在这里遗漏一些非常重要的内容,这很容易修复,或者可能是我还没有研究过的部分。

我正在创建常规形式的游览。该表单有很多字段,但有问题的字段是我的 collection_select。我正在尝试做的是在城市页面中显示与该城市相关的旅游。

这是我保存游览后出现的错误。

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

我对城市和旅游有单独的控制器。非常基本的脚手架,尽管我确实将 :city 添加到了 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 %>

表格完美地显示了所有城市,但是用城市更新旅游给了我出现的错误。

作为稍后的额外问题,我想显示与该城市相关的所有旅游。例如,访问 city/1 将显示该城市的游览。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    &lt;%= collection_select :tour, :city, City.all, :id, :city, {:include_blank =&gt; true } %&gt;

    :city 这里是一个字符串吗?此外,City has_many :cities 关系似乎很奇怪。

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

    【讨论】:

    • 是的,:city 是一个字符串。嗯,我想我要写的是 has_many :tours。因此,旅游与城市相关联。然后该城市将显示该城市的所有游览。
    【解决方案2】:

    你可以试试这个:

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

    【讨论】:

    • 嗯,我现在得到了 #<0x007fa7d8b03d08>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多