当前位置:  开发笔记 > 数据库 > 正文

在named_scope中封装SQL

如何解决《在named_scope中封装SQL》经验,为你挑选了1个好方法。

我想知道是否有办法在named_scope中使用"find_by_sql".我想将自定义sql视为named_scope,因此我可以将其链接到我现有的named_scopes.优化我经常使用的sql片段也很有用.



1> Orion Edward..:

虽然您可以在命名范围的条件下放置您喜欢的任何SQL,但如果您再调用find_by_sql那么"范围"就会被抛弃.

鉴于:

class Item
  # Anything you can put in an sql WHERE you can put here
  named_scope :mine, :conditions=>'user_id = 12345 and IS_A_NINJA() = 1'
end

这是有效的(它只是将SQL字符串粘贴在那里 - 如果你有多个它们与AND连接)

Item.mine.find :all
=> SELECT * FROM items WHERE ('user_id' = 887 and IS_A_NINJA() = 1)

但是,这不是

Items.mine.find_by_sql 'select * from items limit 1'
=> select * from items limit 1

所以答案是"不".如果你考虑幕后发生了什么,那么这很有意义.为了构建SQL rails,必须知道它是如何组合在一起的.
当您创建正常询问,select,joins,conditions,等都是分成不同的部分.Rails知道它可以添加条件而不影响其他所有东西(这是如何with_scopenamed_scope工作).

随着find_by_sql但是,你只要给导轨一个大的字符串.它不知道究竟发生了什么,因此它进入并添加为示波器工作所需添加的东西是不安全的.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有