Rails:显示嵌套列表

时间:2014-01-05 00:51:27

标签: ruby-on-rails ruby-on-rails-4

我有一个具有以下关系结构的房产列表网站

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 %>

1 个答案:

答案 0 :(得分:0)

而不是使用r.cities.investor_cities.each do..., 尝试使用r.cities.select('investor_cities').where(investor_id: @investor.id).each do ...