如何在Ruby上创建省,城市和地区

时间:2014-07-06 06:34:36

标签: ruby-on-rails ruby-on-rails-4 model

我刚开始使用rails,我想创建省,并在省展示城市,地区。我尝试使用acts_as_tree,但它不完整我的想法,你有什么想法吗?

1 个答案:

答案 0 :(得分:2)

<强>模型

您需要查看ancestry gem

这将为您提供所需的acts_as_tree功能;但更重要的是,您需要考虑您的模型结构:

#app/models/province.rb
Class Province < ActiveRecord::Base
    has_many :districts
    has_many :cities, source: :districts
end

#app/models/district.rb
Class District < ActiveRecord::Base
   belongs_to :province
   has_many :cities
end

#app/models/city.rb
Class City < ActiveRecord::Base
   belongs_to :district
end

因为你是新手,所以你可以在路线等处理这个问题:

#config/routes.rb
resources :provinces do
   resources :districts #-> domain.com/provinces/2/districts/2
end

在您的控制器中,您将拥有:

#app/controllers/provinces_controller.rb
Class ProvincesController < ApplicationController
   def index
       @provinces = Province.all 
   end

   def show
       @province = Province.find params[:id]
   end
end

#app/views/provinces/show.html.erb
<% @province.districts.first.cities.each do |city| %>
    <%= city.name %>
<% end %>

-

<强>祖先

如果您想要制作某些省/区children的其他省/区,则需要使用ancestry宝石 - 这样您就可以根据具体情况定义ancestors记录

如果你给我一些细节,我可以解释一下


<强>更新

如您所述,您希望显示数据的方式是根据相关数据显示数据。要做到这一点,您需要能够在需要时调用数据,但您应该能够使用您所拥有的数据:

#app/views/application/index.html.erb
<%= render partial: "list", locals: { items: @provinces } %>

#app/views/application/_list.html.erb
<ul>
    <% items.each do |item| %>
        <li>
            <%= item.name %>
            <%= render partial: "list", locals: {items: item.districts} if item.districts.present? %>
        </li>
    <% end %>
</ul>

这将允许您使用相关数据输出所需的项目