0

我正在尝试遵循 Rails Docs 和 Railscast#88 但有 3 个模型。该页面将有 3 个州、县和市的下拉框。我有 State > County 使用 JQuery。但是,当尝试为 City 构建grouped_collecion_select时,事情就崩溃了。

以下是3个模型:

service_area_state.rb

 class ServiceAreaState < ActiveRecord::Base
    has_many :service_area_counties
    default_scope -> { order(name: :asc) }
 end

service_area_county.rb

class ServiceAreaCounty < ActiveRecord::Base
    belongs_to :service_area_state
    default_scope -> { order(name: :asc) }
end

service_area_city.rb

class ServiceAreaCity < ActiveRecord::Base
    belongs_to :service_area_county
end

在我的控制器中,我有以下内容:

def index

    @states = ServiceAreaState.all
    @counties = ServiceAreaCounty.all
    @cities = ServiceAreaCity.all

end #index

在我看来:

index.html.erb

<div class="row">
<div class="field" id='state_div'>

    <%= label_tag :service_area_state_id, "State", id:"service_area_state" %> <br/>

**This works**
    <%= collection_select(:service_area_state, :id, @states, :id, :name, prompt: true ) %>

</div>

<div class="field" id='county_div'>
    <%= label_tag :service_area_county_id, "County" %><br>

**This works**
    <%= grouped_collection_select(:service_area_county, :service_area_county_id, @states, :service_area_counties, :name, :id, :name, prompt: true ) %>
</div>

<div class="field" id='city_div'>
    <%= label_tag :service_area_city_id, "City" %><br>

**This does not work**
    <%= grouped_collection_select(:service_area_city, :service_area_county_id, @counties, :service_area_cities, :name, :id, :name, prompt: true )   %>
</div>
</div>

我收到以下错误:

undefined method `service_area_cities' for #<ServiceAreaCounty:0x007fb5e7dac060>

在这条线上:

<%= grouped_collection_select(:service_area_city, :service_area_county_id, @counties, :service_area_cities, :name, :id, :name, prompt: true )   %>

有人能发现我哪里出错了吗?

谢谢!

4

1 回答 1

1

您需要在 ServiceAreaCounty 模型中将 service_area_cities 设置为关联(听起来像是 has_many 关联):

class ServiceAreaCounty < ActiveRecord::Base
  belongs_to :service_area_state
  has_many :service_area_cities
  default_scope -> { order(name: :asc) }
end
于 2016-04-28T04:53:18.197 回答