我刚接触ruby on rails,我将创建在线租赁系统。
这是位置基础模型
app/models/state.rb
Class State < ActiveRecord::Base
has_many :provinces
end
app/models/province.rb
Class Province < ActiveRecord::Base
belongs_to :state
has_many :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
第一个问题是如何在下面显示所有内容
第二个问题是,如何创建面包屑所有模型
加利福尼亚&gt;&gt;弗雷斯诺&gt;&gt;梅尔文&gt;&gt;梅尔文1
答案 0 :(得分:0)
您可能希望在数据对象中引入层次结构。 这可以通过几种方式完成。看看the ancestry gem
如果你想硬编码:
# locations_controller.rb
def index
@locations = State.all
end
# app/views/locations/index.html.erb
<ul>
<%= render @locations %>
</ul>
# app/views/locations/_state.html.erb
<li>
<%= state.name %>
<% if state.provinces.present? %>
<ul>
<%= render state.provinces %>
</ul>
<% end %>
</li>
# app/views/locations/_province.html.erb
<li>
<%= province.name %>
<% if province.districts.present? %>
<ul>
<%= render province.districts %>
</ul>
<% end %>
</li>
# app/views/locations/_district.html.erb
<li>
<%= district.name %>
<% if district.cities.present? %>
<ul>
<%= render district.cities %>
</ul>
<% end %>
</li>
# app/views/locations/_city.html.erb
<li>
<%= city.name %>
</li>
对于Breadcrumbs,您需要在每个模型中引入一个祖先方法。 e.g。
class City
...
def ancestry
district.ancestry << self
end
...
end
# ... other classes
class State
...
def ancestry
[self]
end
end
然后你可以渲染面包屑部分
# app/views/layout.html.erb
<%= render partial: 'shared/breadcrumbs', locals: { ancestry: @some_instance.
def breadcrumbs(ancestry)
ancestry
end
# app/views/shared/_breadcrumbs.html.erb
<ul>
<% ancestry.each do |location| %>
<li>
<%= link_to location.name, url_for(location) %>
</li>
<% end %>
</ul>