0

州は多くのユニットを持つことができます。ユニットは 1 つの州のみを持つことができます。

ホームページで、実際にユニットがある州のみのリストを返したいと思います。現在、それらはすべて名前でリストされています。

したがって、ユニットを持つのがアリゾナとコロラドだけである場合、それらはホームページにのみ表示されます。

私は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 に答える