我想知道是否有办法在named_scope中使用"find_by_sql".我想将自定义sql视为named_scope,因此我可以将其链接到我现有的named_scopes.优化我经常使用的sql片段也很有用.
虽然您可以在命名范围的条件下放置您喜欢的任何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_scope
和named_scope
工作).
随着find_by_sql
但是,你只要给导轨一个大的字符串.它不知道究竟发生了什么,因此它进入并添加为示波器工作所需添加的东西是不安全的.