Вы можете позвонить @note.tags.any?
, чтобы проверить, есть ли какие-либо теги. Обратите внимание, что это попадет в базу данных для подсчета. Возможно, вы захотите оставить присоединение при извлечении @note
, чтобы сохранить этот запрос. Eg.:
Note.first(:select => 'notes.*, case when tags.id is not null then 1 else 0 end as has_any_tags', :joins => "LEFT JOIN tags ON tags.note_id = notes.id")
Ваша модель Note
теперь будет иметь поле has_any_tags
, которое либо 0
(false), либо 1
(true), если есть какие-либо связанные теги.
Вы можете переместить указанные выше параметры запроса в область по умолчанию и обернуть поле в метод доступа:
class Note
has_many :tags
default_scope :select => 'notes.*, case when tags.id is not null then 1 else 0 end as has_any_tags', :joins => "LEFT JOIN tags ON tags.note_id = notes.id"
def has_any_tags?
has_any_tags == "1"
end
end
Теперь все происходит прозрачно:
>> Note.first.has_any_tags?
=> true