返回列表基于has_many关系

时间:2013-08-09 20:35:45

标签: ruby-on-rails

一个州可以有很多单位。一个单位只能有一个国家。

在主页上,我想返回一个实际上只有单位状态的列表。现在他们都按名字列出。

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

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

2 个答案:

答案 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.