0

一个州可以有许多单位。一个单位只能有一个州。

在主页上,我想返回一个仅包含实际具有单位的州的列表。现在他们都按他们的名字列出。

因此,如果亚利桑那州和科罗拉多州是唯一有单位的地区……它们只会出现在主页上。

我是 Rails 的新手,我已经搜索过。但是,我错过了一些东西。似乎它将是控制器上的某种查询或过滤器?所以它只返回有单位的州?任何帮助,将不胜感激。

Static page controller

  def home
   @units = Unit.all
   @states = State.order('long_name')
  end



Home view

<% @states.each do |state| %>
<%= link_to state.long_name, state %>
<% end %>
4

2 回答 2

1

JOIN 应该足够了:

@states = State.joins(:units).order('states.long_name ASC')

或者,您可以将其移至模型范围:

scope :with_units, joins(:units).order('states.long_name ASC')

并在控制器中调用它:

@states = State.with_units
于 2013-08-09T20:45:47.650 回答
0

控制器不是那个地方。这是一个典型的模型问题。这应该让你工作:

States.all.select {|state| !state.units.empty?}

但是,为 State 类创建以下方法会更好:

class State <ActiveRecord::Base
  ...
  def class.with_units
    select {|state| !state.units.empty?}
  end
end

这会给你:

State.with_units     #=> All states with units

但也可以用于关联:

user.favourite_states.with_units      #=> All user's favourite states filtered to ones with units.
于 2013-08-09T20:46:37.073 回答