Rails find_by_id.attr 的效率是不是不高呢?

yangman_wenzhu · 2014年04月17日 · 最后由 leozwa 回复于 2014年04月17日 · 2201 次阅读
targeted_cpc = Pretargeting.find_by_id(pretargeting_id).name.to_f

这样一行代码的效率是否不高呢? 是不是不如这样写

 targeted_cpc = Pretargeting.find_name_by_id(pretargeting_id).to_f
这条提示:
undefined method `find_target_cpc_by_id' for #<Class:0x007fc16b94e718>

find_by 是不是没有像这样的find_name_by_id写法呢?
共收到 11 条回复

先去看看 index 的概念

#1 楼 @karmue 哦 刚才看了一下 使用 index 相对应的列效率会高些,Pretargeting 表里有 name 但是为什么无法使用

Pretargeting.find_name_by_id
find_by_id.attr

这段代码会拿出对应行的所有段,不过一般不会有太大影响

没有 find_name_by_id 这种写法,如果只想取出某一列,可以使用 pluck

targeted_cpc = Pretargeting.find_by_id(pretargeting_id).pluck(:name).to_f

具体差异看控制台打印的 sql ps:find_by_attr 这种写法已经废弃了,用 id 查询可以直接 find(id)

#3 楼 @saiga 哦 那我从哪里可以知道 find_by_attr 方法已经废弃了呢,从哪里可以找到最新用法呢? #1 楼 @karmue #3 楼 @saiga 感谢俩位的回答了,我的基础还不好,建议看什么书籍或者网站呢?

#4 楼 @yangman_wenzhu 一般查询 API 的时候会提醒 http://apidock.com/rails/ActiveRecord/FinderMethods/find_by_attributes 而且使用的时候 console 应该也会提醒吧 (不确定)

#5 楼 @leozwa 嗯 在 console 下会提醒的,就是那行错误,哈哈,多谢了

#7 楼 @Juanito 嗯好的,一有时间马上就看,多谢。 还希望各位多提建议呢!!

#8 楼 @yangman_wenzhu 不急呀,還有一輩子的時間!:D

#9 楼 @Juanito 哈哈 我很笨 所以要笨鸟先飞!

#6 楼 @yangman_wenzhu 及时不报错也应该有个 Deprecation Warning "find_by_xxx" is deprecated and may be removed from future releases 一类的 多注意下 warning

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册