Uniq / Distinct结果:通过配置Rails进行关联

时间:2015-08-15 17:59:19

标签: ruby-on-rails unique rails-activerecord

我有以下模型设置

   class Tale < ActiveRecord::Base
   has_many :tale_culture_joins
   has_many :cultures, through: :tale_culture_joins, dependent: :destroy, crud: true, index: true
   has_many :tale_purpose_joins
   has_many :purposes, through: :tale_purpose_joins, dependent: :destroy, crud: true, index: true
   has_many :tale_book_joins
   has_many :books, through: :tale_book_joins, dependent: :destroy, crud: true, index: true
   has_many :tale_keyword_joins
   has_many :keywords, through: :tale_keyword_joins, dependent: :destroy, crud: true, index: true
   has_many :tale_character_joins
   has_many :characters, through: :tale_character_joins, dependent: :destroy, crud: true, index: true
   has_many :tale_moral_joins
   has_many :morals, through: :tale_moral_joins, dependent: :destroy, crud: true
   has_many :values, through: :morals, index: true
   has_many :tale_event_joins
   has_many :events, through: :tale_event_joins, dependent: :destroy, crud: true

   end

   Tale -> Moral -> Value
   Tale(1) -> Moral(1,2)
   Moral(1) -> Value(1,2)
   Moral(2) -> Value(2,3)
   Tale(1).values # => [1,2,2,3]

我理解它背后的原因,我是否可以配置rails不仅返回,而且还使用uniqs查询/构建返回值,以便将uniq条件传递给sql查询本身

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望能够(例如)执行Table.events并获取一系列独特事件。您可以像events这样获得此行为:

has_many :events, -> {uniq}, through: :tale_event_joins, dependent: :destroy, crud: true

您可以在任何您想要独特收藏的关系中包含类似的-> {uniq}范围。