0

何よりもまず、時間を割いてこの投稿を読んでくれた皆さんに感謝します。よろしくお願いします。

プロバイダーが持つ可能性のあるすべての一意の場所の名前を取得する方法を見つけようとしています。

私の最初のアイデアは、すべてのコースを反復処理してから発生し、一意の場所のリストを返すプロバイダー モデルのメソッドを作成することでした。

Rails apiの.uniqメソッドを見てきましたが、うまくいきませんでした。

私のさまざまなモデル/関連付けは次のようになります。

models/provider.rb

class Provider < ActiveRecord::Base
  has_many :courses
  has_many :teachers
end

models/course.rb

class Course < ActiveRecord::Base
  has_many :occurrences, :dependent => :destroy
  belongs_to :provider
end

models/occurrence.rb

class Occurrence < ActiveRecord::Base
  belongs_to :course
  belongs_to :location
end

models/location.rb

class Location < ActiveRecord::Base
  attr_accessible :name
  has_many :occurrences
end 

これを達成する最善の方法は何ですか?

コメントを読んだ後、私はこれを試しました:

Provider モデルに unique_locations メソッドを作成しました。次のコードがあります (回答に基づいて)

def unique_locations
  Location.joins(occurrences: :course).where(courses: { provider_id: self.id }).uniq.pluck('locations.name')
end`

そして私の見解でそれを使用する:

<% @provider.unique_locations.each do |l| %>
  <%= l %><br>
<% end %>`

しかし、私はまだユニークではない結果を得ています。何か案は?

4

1 に答える 1

2

Location.uniq.pluck(:name)一意の場所名の配列を返すものを試すことができます。プロバイダーから行くには、使用する必要があります:joins(与えられた@provider)

Location.joins(occurences: :course).where(courses: { provider_id: @provider.id }).uniq.pluck('locations.name')
于 2013-02-07T02:38:05.933 に答える