Ruby on rails Rails模型方法:哪一种更好?

Ruby on rails Rails模型方法:哪一种更好?,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,我能够用两种不同的方法通过模型测试。哪个更好?我可以采取什么方法来确定哪种方法更可取,或者哪种方法更可取 def queued_video?(video) queue_items.where(video: video.id).present? end vs 我假设queued_items是一个ActivreRecord查询 我不喜欢第二个,因为它计算所有queue\u项目。第一种更有效 您可以使用any?而不是present?使其感觉更自然 我认为您最好的选择是使用ActiveRecord

我能够用两种不同的方法通过模型测试。哪个更好?我可以采取什么方法来确定哪种方法更可取,或者哪种方法更可取

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


我假设
queued_items
是一个
ActivreRecord
查询

我不喜欢第二个,因为它计算所有
queue\u项目
。第一种更有效

您可以使用
any?
而不是
present?
使其感觉更自然

我认为您最好的选择是使用
ActiveRecord

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 

并且以更优雅的方式完全满足您的需求。

我同意在大多数情况下,这是正确的答案。另一种解决方案的一个理由是,如果所有涉及的记录都已加载,则不需要访问数据库,因此在某些情况下,它可能是更好的选择。如果您使用另一个,它可以简化为
queue\u items.any?{| i | i.video==video}
队列项目。有吗?{| i | i.video_id==video.id}
取决于是否加载了视频记录。
SELECT 1 AS one FROM `table_name` WHERE `table_name`.`video_id` = 123 LIMIT