首先,感谢每个人花时间阅读这篇文章。很多,非常感谢提前。
我正在尝试弄清楚如何检索提供商可能拥有的所有 唯一 位置名称。
我的第一个想法是在Provider模型中编写一个方法,该方法将迭代所有课程然后发生并返回一个唯一位置列表。
我已经查看了Rails api中的.uniq方法,但没有任何运气。
以下是我的不同模特/协会的样子:
模型/ provider.rb
class Provider < ActiveRecord::Base
has_many :courses
has_many :teachers
end
模型/ course.rb
class Course < ActiveRecord::Base
has_many :occurrences, :dependent => :destroy
belongs_to :provider
end
模型/ occurrence.rb
class Occurrence < ActiveRecord::Base
belongs_to :course
belongs_to :location
end
模型/ 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 %>`
但我仍然得到非独特的结果。有什么想法吗?
答案 0 :(得分:2)
您可以尝试Location.uniq.pluck(:name)
,它将返回一系列唯一的位置名称。从提供商处开始,您必须使用:joins
(给定@provider
)
Location.joins(occurences: :course).where(courses: { provider_id: @provider.id }).uniq.pluck('locations.name')