создание именованных областей: нужно ли объявлять эту модель перед атрибутом

#ruby-on-rails

#ruby-on-rails

Вопрос:

При создании именованных областей в модели необходимо ли вызывать модель перед атрибутом, который вы используете в своем запросе?

Пример

   scope :sorted, order('position ASC')
 

против

   scope :sorted, order('pages.position ASC')
 

является ли последнее предпочтительным или встроенным в соглашения? есть ли преимущества в любом из них? или это просто вопрос ясности или разборчивости?

Ответ №1:

Вам нужно будет объявить модель, если область будет использоваться с объединением с другой моделью, у которой есть поле с тем же именем.

Скажите company has_one :contact , и Contact у position него есть . Затем

 Company.sorted.joins(:contact)
 

будет жаловаться (на уровне SQL), что неясно, какое из position полей следует использовать для сортировки.

В противном случае это необязательно.