我刚开始使用rails,我想创建省,并在省展示城市,地区。我尝试使用acts_as_tree,但它不完整我的想法,你有什么想法吗?
答案 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>
这将允许您使用相关数据输出所需的项目