一个州可以有很多单位。一个单位只能有一个国家。
在主页上,我想返回一个实际上只有单位状态的列表。现在他们都按名字列出。
因此,如果亚利桑那州和科罗拉多州是唯一拥有单位的人......他们只会出现在主页上。
我是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 %>
答案 0 :(得分:1)
加入应该足够了:
@states = State.joins(:units).order('states.long_name ASC')
或者,您可以将其移动到模型范围:
scope :with_units, joins(:units).order('states.long_name ASC')
并在控制器中调用:
@states = State.with_units
答案 1 :(得分: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.