我最近将我的rails升级到Rails 4.1.6。
此查询过去有用:
@user = User.find(:all, :conditions => { :name => 'batman' })
现在我收到此错误消息:
Couldn't find all Users with 'id': (all, {:conditions=>{:name=>"batman"}}) (found 0 results, but was looking for 2)
当我查看日志时,我可以看到rails正在尝试执行完全不同的查询:
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" IN ('all', '---
:conditions:
:name: batman
')
看起来,它试图让所有用户拥有ID"所有"和" {:conditions => {:name =>" batman"}}"。请帮忙。
更新:
我背后的真正问题是,我希望得到一个特定的用户并添加他的汽车,只有蓝色的汽车。例如,这是我的查询,用户ID是20。
@user = User.joins(:cars).find(20, :cars => {:color => "blue"})
但是我收到了这个错误:
无法找到所有用户':(20,{:cars => {:color =>" blue"}}) (找到41个结果,但正在寻找2)
答案 0 :(得分:2)
其他一些人已经指出:查询语法已更改。试试这个:
@user = User.joins(:cars).where(:cars => { :color => "blue" }).find(20)
请注意,如果找不到该记录,这将引发异常,返回一个空数而不是调用:
@user = User.joins(:cars).where(:id => 20, :cars => { :color => "blue" })
我建议阅读:http://guides.rubyonrails.org/active_record_querying.html
如果你想加载用户,即使他没有任何车辆而且只显示他的蓝色车,我会这样做:
@user = User.find(20) # returns the user
@user.cars.where(:color => 'blue') # returns the user's blue cars (or an empty array)
答案 1 :(得分:1)
您一定要阅读此ActiveRecord Query Interface quide
User.where(name: "batman")
答案 2 :(得分:-2)
此版本的Rails中不推荐使用find
方法(请参阅the reference)。
相反,您必须使用where
方法。
在您的情况下,您应该写@user = User(:name => 'batman')
或@user = User(name: 'batman')