我可以通过两种不同的方法传递我的模型测试。哪个更好?我可以采取哪些方法来确定哪种方法更可取,或者哪种方法更可取?
def queued_video?(video)
queue_items.where(video: video.id).present?
end
VS
def queued_video?(video)
queue_items.map(&:video).include?(video)
end
答案 0 :(得分:3)
我假设queued_items
是ActivreRecord
查询。
我不喜欢第二种,因为它会评估所有queue_items
。第一种是更有效率。
您可以使用any?
代替present?
,让感觉更自然。
我认为您最好的选择是使用ActiveRecord
exists?
方法
def queued_video(video)
queue_items.exists?(video: video.id)
end
会产生select 1
查询
SELECT 1 AS one FROM `table_name` WHERE `table_name`.`video_id` = 123 LIMIT
并以更优雅的方式完成您的需要。