我有以下代码至极投用Rails 3的一个错误:正如你可以看到它像user_id是转换named_scope钢轨3
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2053809816 AND audition_tags.audition_id = auditions.id)) ORDER BY auditions.cr' at line 1: SELECT `auditions`.* FROM `auditions` WHERE (NOT EXISTS (SELECT * FROM audition_tags WHERE audition_tags.user_id = '#<ActiveRecord::Relation:0x104ee3c20>',2053809816 AND audition_tags.audition_id = auditions.id)) ORDER BY auditions.created_at DESC LIMIT 0, 10
:
调用时出现以下错误现在一个表包含一个ActiveRelation对象,以及...我的user_id
我不明白发生了什么...你有什么想法吗?
感谢
更新:这里是完整的SQL输出:
SELECT `auditions`.* FROM `auditions` WHERE (NOT EXISTS (SELECT * FROM audition_tags as bar WHERE bar.user_id = '#<ActiveRecord::Relation:0x104aa6c48>',2053809816 AND bar.audition_id = auditions.id)) ORDER BY auditions.created_at DESC LIMIT 0, 10
UPDATE2:这里是叫我的范围代码https://gist.github.com/ddddfeddf70264a81289
UPDATE3:正如你所看到的我的要点链接的示波器被称为“呼叫”:
scopes.inject(self) {|m,v| m.scopes[v[0]].call(m, v[1]) }
如果我登录的USER_ID送它一个Fixnum不是数组:
scopes.inject(self) do |m,v|
logger.info ">>> SCOPE : #{v[0].inspect} | ARG : #{v[1].inspect} | ARG CLASS : #{v[1].class.inspect} <<<"
m.scopes[v[0]].call(m, v[1])
end
所以,现在的问题是更精确:我送一个Fixnum作为参数传递给我的named_scope但得到的输出数组类型:ActiveRecord的::关系,Fixnum对象]
UPDATE4:我终于找到解决办法(但不知道为什么???)
我取代 “呼” 的 “送”,它をrks ...
results = scopes.inject(self) do |combined_scope, scope|
combined_scope.send(scope[0], scope[1])
end
谢谢大家的帮忙!
不知道,但不应该'FROM audition_tags酒吧WHERE'是'FROM audition_tags,酒吧WHERE' - 注意'AS' – Ariejan 2010-10-26 15:13:00
不,你并不需要,据我所知它是可选 – Mike 2010-10-26 15:18:12
完整的SQL如何生成? – shingara 2010-10-26 15:25:44