ruby-on-rails - Rails 模型方法 : which is preferable?

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

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

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

对比

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

最佳答案

我假设 queued_items 是一个 ActivreRecord 查询。

我不喜欢第二个,因为它评估所有 queue_items。第一个效率更高。

你可以使用 any? 而不是 present? 来让它感觉更自然。

我认为您最好的选择是使用 exists? 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 

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

关于ruby-on-rails - Rails 模型方法 : which is preferable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27338026/

相关文章:

ruby-on-rails - rescue_from 后的 redirect_to 不起作用

ruby-on-rails - Rails 4 ActionView::Template::生产错误

html - 如何使用相同的表单在 ruby​​ on rails 中创建和编辑

ruby-on-rails - 在特定时间安排延迟作业

ruby-on-rails - 薄型或美洲狮 : What to use for a Rails Chat server using Faye?

ruby-on-rails - 将 cookie 与子域一起使用会破坏闪存

ruby-on-rails - 如何在 Rails 3 中注册时将简单的验证码与设计集成?

ruby-on-rails - 如何删除表格的白色背景?基础 rails

ruby-on-rails - ActiveRecord 数组计数

ruby-on-rails - 未定义方法 `count' 为 nil :NilClass rails