Rails模型方法:哪个更好?

时间:2014-12-07 00:06:32

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我可以通过两种不同的方法传递我的模型测试。哪个更好?我可以采取哪些方法来确定哪种方法更可取,或者哪种方法更可取?

def queued_video?(video)
  queue_items.where(video: video.id).present?
end

VS

def queued_video?(video)
  queue_items.map(&:video).include?(video)
end 

1 个答案:

答案 0 :(得分:3)

我假设queued_itemsActivreRecord查询。

我不喜欢第二种,因为它会评估所有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 

并以更优雅的方式完成您的需要。