我试过note.tags.nil ?,但它没有用。我该怎么做呢?谢谢你的阅读。
答案 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?
或任何您喜欢的内容进行检查。