我有一个具有以下关系结构的房产列表网站
Region has_many :cities
City has_many :investor_cities
City has_many :investors through: :investor_cities
Investor has_many :investor_cities
Investor has_many :cities through: :investor_cities
投资者城市记录投资者喜欢购买的城市。它将用于与投资者匹配房产。
在投资者的展会视图中,我想按区域显示他们感兴趣的城市。
在控制器中
@regions = Region.all
在视图中
<% @regions.each do |r| %>
<p><%= r.name %></p>
<ul>
<% r.cities.each do |c| %>
<% @inv_cty = InvestorCity.find_by_city_id_and_investor_id(c.id, @investor.id) %>
<% if @inv_city %>
<%= @inv_city.city.name %>
<% end %>
<% end %>
</ul>
<% end %>
然而,没有投资者城市(尽管数据库中有两个)。
我也试过这个:
r.cities.investor_cities.each do...
但是得到了这个错误。
undefined method `investor_cities' for #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_City:0x007fb47e09b4d0>
有点不知所措,所以任何想法都会很棒。谢谢。
编辑 - 以下内容有效。我很想知道如何做得更干净一点。感谢
<% @regions.each do |r| %>
<p><%= r.name %></p>
<ul>
<% r.cities.each do |c| %>
<% c.investor_cities.each do |ic| %>
<% if ic.investor_id == @investor.id %>
<li><%= ic.city.name %> <%= ic.investor.id %></li>
<% end %>
<% end %>
<% end %>
</ul>
<% end %>
答案 0 :(得分:0)
而不是使用r.cities.investor_cities.each do...
,
尝试使用r.cities.select('investor_cities').where(investor_id: @investor.id).each do ...