В Ruby on Rails, если в заметке много тегов, как проверить, есть ли в заметке какие-либо теги? - PullRequest
0 голосов
/ 03 августа 2010

Я пробовал note.tags.nil ?, но это не сработало. Как мне это сделать? Спасибо за чтение.

Ответы [ 3 ]

2 голосов
/ 03 августа 2010

Если вы хотите узнать, имеет ли @note какой-либо связанный tags, вы можете использовать

@note.tags.empty?
1 голос
/ 03 августа 2010

Вы можете позвонить @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
0 голосов
/ 03 августа 2010

Кроме того, вы можете подумать о наличии столбца кэша счетчика для тегов.С этим :tags_count вам не понадобится другой SQL-запрос.Тогда вы можете проверить с помощью @note.tags_count == 0, @note.tags_count.zero? или любым другим способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...