在Ruby on Rails中,如果一个音符有很多标签,我该如何检查音符是否有任何标签?

时间:2010-08-03 13:12:33

标签: ruby-on-rails

我试过note.tags.nil ?,但它没有用。我该怎么做呢?谢谢你的阅读。

3 个答案:

答案 0 :(得分:2)

如果您想知道@note是否有任何关联的tags,您可以使用

@note.tags.empty?

答案 1 :(得分:1)

您可以致电@note.tags.any?来测试是否有任何标签。请注意,这将命中数据库进行计数。您可能希望在提取@note时离开加入,以保存此查询。例如:

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(false)或0(true)的字段1

您可以将上面的查询选项移到默认范围内,并将该字段包装在一个存取器中:

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

答案 2 :(得分:0)

另外,您可以考虑为Tags添加一个计数器缓存列。使用:tags_count,您将不需要另一个SQL查询。您可以使用@note.tags_count == 0@note.tags_count.zero?或任何您喜欢的内容进行检查。