Rails:查找所有条件

Lea*_*cim 46 ruby-on-rails

在我的应用程序中,我有来自不同国家/地区的用户,并希望对其进行查找

我尝试在索引操作中这样做

 @fromcanada = User.find(:all, :country => 'canada')
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

 Unknown key: country
Run Code Online (Sandbox Code Playgroud)

但是,这导致我问,什么可以成为关键?在我的数据库模式文件中,我在users表上有一个"country"列.

t.string   "country"
Run Code Online (Sandbox Code Playgroud)

而且,当我找到所有的时候

@users = User.all
Run Code Online (Sandbox Code Playgroud)

我能够做到这一点

<%= user.country %></p>
Run Code Online (Sandbox Code Playgroud)

你能解释为什么我发现所有条件都不起作用吗?并告诉我应该怎么做?

Way*_*Lue 81

试试这个.

@fromcanada = User.find(:all, :conditions => { :country => 'canada' })
Run Code Online (Sandbox Code Playgroud)

编辑:正如jason328所指出的,上面的答案在3.2中已经弃用了,更新的答案就是

@fromcanada = User.where(:country => 'canada')
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的有用编辑。为什么 Rails 会弃用(大概)保留该功能不会造成任何损害的地方? (2认同)

jas*_*328 32

如果没有人阅读评论.更好的格式是

@fromcanada = User.where(country: 'canada').all
Run Code Online (Sandbox Code Playgroud)

上一个答案的代码在3.2中已被弃用.

对于那些使用Rails 4的人来说,删除该all方法就足够了.

@fromcanada = User.where(country: 'canada').to_a
Run Code Online (Sandbox Code Playgroud)

注意,将to_a查询调用为数组格式.

  • 在rails 4中不推荐使用Relation#all.如果你想加载,只需用`load`替换`all`.否则你甚至不需要`all`.你的答案没错.我只是期待rails 4. (3认同)