我在解决如何在三重嵌套资源中显示最深层值时遇到问题。 (Roast
,Country
,Region
)。
我可以用以下方式显示第一级:
<% for countries in @roast.countries %>
<br />
<strong>Country:</strong>
<%= countries.country_name %>
<% end %>
但是我无法展示下一个级别。
#
的未定义方法'regions'<Country::ActiveRecord_Associations_CollectionProxy:0x007fbaf8ad25b8>
我尝试过以下操作,但这不起作用。
<% for regions in @roast.countries.regions %>
<br />
<strong>Country:</strong>
<%= countries.regions.region_name %>
<% end %>
@roast.country.regions
也不起作用。
答案 0 :(得分:1)
粗略地说,它应该看起来像:
<% @roast.countries.each do |country| %>
<div class='country-container'>
<div class='country title'>
Country:
</div>
<div class='country-name'>
<%= country.country_name %>
</div>
<div class='regions-container'>
<div class='region title'>
Regions:
</div>
<div class='regions'>
<% country.regions.each do |region| %>
<div class='region'>
<%= region.name %>
</div>
<% end %>
</div>
</div>
</div>
<% end %>
divs
classes
css
允许您在<strong>
中设置样式,而不必执行sass
等。例如,如果您使用.country-container
.title
font-weight: bold
font-size: 110%
&.country
color: red
&.region
color: blue
.regions-container
.region
color: green
1}},你可以这样做:
<% for countries in @roast.countries %>
这:
each
不是很红宝石般的。您应该使用<% for country in @roast.countries %>
<br />
<strong>Country:</strong>
<%= country.country_name %>
<br/>
<p>Regions:</p>
<% for region in country.regions %>
<%= region.region_name %>
<% end %>
<% end %>
代替。
答案 1 :(得分:0)
INBOX
您为每个国家/地区选择其区域
答案 2 :(得分:0)
如果您只有一个国家/地区,并且需要获取此国家/地区的所有区域,那么循环就像这样
<% for region in @roast.countries.first.regions %>
<br />
<strong>Region:</strong>
<%= region.region_name %>
<% end %>
或者,如果您需要显示所有国家/地区的所有区域,那么循环就像这样
我猜模型关系看起来像
class Roast < ApplicationRecord
has_many :countries
end
class Country < ApplicationRecord
belongs_to :roast
has_many :regions
end
class Region < ApplicationRecord
belongs_to :country
end
然后
<% for country in @roast.countries %>
<br />
<strong>Country:</strong>
<%= country.country_name %>
<% for region in country.regions %>
<br />
<strong>Region:</strong>
<%= region.region_name %>
<% end %>
<% end %>
最喜欢的是ruby each
方法,而不是loop
,如下所示
<% @roast.countries.each do |country| %>
<br />
<strong>Country:</strong>
<%= country.country_name %>
<% country.regions.each do |region| %>
<br />
<strong>Region:</strong>
<%= region.region_name %>
<% end %>
<% end %>