显示三重嵌套表单值 (Rails 5.1)
Displaying Triple Nested Form Values (Rails 5.1)
我在弄清楚如何在三重嵌套资源中显示最深的值时遇到了问题。 (Roast
, Country
, Region
).
我可以显示第一个级别:
<% for countries in @roast.countries %>
<br />
<strong>Country:</strong>
<%= countries.country_name %>
<% end %>
但是我无法显示下一层。
undefined method 'regions' for #<Country::ActiveRecord_Associations_CollectionProxy:0x007fbaf8ad25b8>
我尝试了以下方法,但这不起作用。
<% for regions in @roast.countries.regions %>
<br />
<strong>Country:</strong>
<%= countries.regions.region_name %>
<% end %>
@roast.country.regions
也不行。
粗略地说,它应该是这样的:
<% @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
这个:
<% for countries in @roast.countries %>
不是很 ruby 风格。您应该改用 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 %>
每个国家/地区 select 地区
如果你只有一个国家,你需要获取这个国家的所有地区,那么循环看起来像这样
<% 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 %>
我在弄清楚如何在三重嵌套资源中显示最深的值时遇到了问题。 (Roast
, Country
, Region
).
我可以显示第一个级别:
<% for countries in @roast.countries %>
<br />
<strong>Country:</strong>
<%= countries.country_name %>
<% end %>
但是我无法显示下一层。
undefined method 'regions' for #
<Country::ActiveRecord_Associations_CollectionProxy:0x007fbaf8ad25b8>
我尝试了以下方法,但这不起作用。
<% for regions in @roast.countries.regions %>
<br />
<strong>Country:</strong>
<%= countries.regions.region_name %>
<% end %>
@roast.country.regions
也不行。
粗略地说,它应该是这样的:
<% @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
这个:
<% for countries in @roast.countries %>
不是很 ruby 风格。您应该改用 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 %>
每个国家/地区 select 地区
如果你只有一个国家,你需要获取这个国家的所有地区,那么循环看起来像这样
<% 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 %>