Rails 4 wprowadził ostrzeżenie o wycofaniu podczas używania: uniq => true z has_many: through. Na przykład:
has_many :donors, :through => :donations, :uniq => true
Daje następujące ostrzeżenie:
DEPRECATION WARNING: The following options in your Goal.has_many :donors declaration are deprecated: :uniq. Please use a scope block instead. For example, the following:
has_many :spam_comments, conditions: { spam: true }, class_name: 'Comment'
should be rewritten as the following:
has_many :spam_comments, -> { where spam: true }, class_name: 'Comment'
Jaki jest poprawny sposób przepisania powyższej deklaracji has_many?
ruby-on-rails
activerecord
rails-activerecord
ruby-on-rails-4
Ryan Crispin Heneise
źródło
źródło
distinct
zamiastuniq
. Zobacz tę odpowiedź, aby uzyskać więcej informacji.Oprócz odpowiedzi Dylansa, jeśli zdarza się, że rozszerzasz powiązanie z modułem, upewnij się, że łączysz go w bloku zasięgu (w przeciwieństwie do określania go osobno), na przykład:
Może to tylko ja, ale wydaje się bardzo nieintuicyjne użycie bloku zasięgu do rozszerzenia proxy asocjacji.
źródło