Railnoobの質問を許してください。関連するレコードのリストを表示しようとしていますが、反対方向の関連を処理するのに問題があります。
たとえば、私は
Country
has_many :states
has_many :users, :through => :events
has_many :venues, :through => :events
has_many :users
has_many :venues
end
State
belongs_to :country
has_many :cities
end
City
belongs_to :state
has_many :events
end
Event
belongs_to :city
belongs_to :user
belongs_to :venue
end
Venue
has_many :events
belongs_to :country
end
User
has_many :events
belongs_to :country
end
カントリーショービューでは、すべてのイベント、すべての会場、およびすべてのユーザーを一覧表示しようとしています。
イベントは簡単です
@country = Country.find(params[:id])
@events = @country.states.cities.events.find(:all)
しかし、ユーザーと会場を一覧表示するための最良のアプローチを視覚化するのに苦労しています。
要件は次のとおりです。
- 個々のユーザー/会場は、重複することなく1回リストする必要があります。
- ユーザー/会場は、イベントの数に基づいて注文する必要があります(現在の国の場合、合計ではありません)。
これはかなり簡単なはずですが、のさまざまな順列で遊んだ後、events.includes(:user)
必要.select("DISTINCT(ID)")
な.order(user.events.length)
クエリを生成できませんでした。
私はおそらくこれで精神的な轍に引っかかっていると思います。私が正しいラックにいるかどうかを確認するために、コミュニティからいくつかの考えやアイデアを形成していただければ幸いです。
ありがとう!
編集
もう少し考えてみると、私の問題は、国とユーザーの間に2つの関連付け、イベントを介した関連付け、およびアドレスの一部としての直接の関連付けがあることから生じていると思います。上記のモデルの説明を更新しました。
この結果、国のショーページで、住所ではなくイベントを通じて国に関連付けられているユーザーを確実に一覧表示するにはどうすればよいですか?
また、重複したユーザーを取得しています。使用してみまし.uniq?
たが、エラーが返される場合があります。これまで使用した方が適切と思われる'nil' is not an ActiveModel-compatible object that returns a valid partial path.
場合もあります。:select => "DISTINCT(ID)"
しかし、データベースとの対話方法に関して、これら2つのアプローチの違いは何ですか?