2012-03-10 5 views
39

私はさまざまな国からのユーザーを持っていると私はindexアクションのRails:私のアプリで条件

@fromcanada = User.find(:all, :country => 'canada') 

でこのようにそれを実行しようとしました

それらに発見を実行したいが、私が得たとのすべてを検索エラー

Unknown key: country 

しかし、それが私に尋ねると、キーになることができますか?私のデータベーススキーマファイルでは、ユーザーテーブルに「国」列があります。私は条件に私の発見すべてが機能しなかった理由を、私はこの

<%= user.country %></p> 

を行うことができたすべての

@users = User.all 

あなたは説明できます見つけたさらに

t.string "country" 

、?どうしたらいいのか教えてください。

+1

使用しているRailsのバージョンは何ですか? – James

+3

'@fromcanada = User.where(:country => 'canada')。allはおそらくより良いスタイルになります。 –

+0

@muistooshortなぜ 'all'を呼び出す必要がありますか? 'User.all'を呼び出すと、すべてのユーザが取得されますが、' where'を使ってユーザをフィルタリングすると意味がありません。(初心者のご迷惑をおかけします) –

答えて

67

これを試してください。

@fromcanada = User.find(:all, :conditions => { :country => 'canada' }) 

編集:jason328が指摘したように 、上記の答えは3.2で廃止され、そして更新答えは誰がコメントを読んでいない場合には

@fromcanada = User.where(:country => 'canada') 
30

だろう。より良いフォーマットは

@fromcanada = User.where(country: 'canada').all 

前の回答のコードは3.2で廃止されるだろう。

また、Rails 4を使用している場合は、allメソッドを削除するだけで十分です。

@fromcanada = User.where(country: 'canada').to_a 

to_aは、クエリを配列形式に呼び出すことに注意してください。

+3

Relation#allのこの使用は非難されています。熱心な負荷には、 'all'を' load'に置き換えてください。それ以外の場合は、 'all'は必要ありません。あなたの答えは間違っていません。私はレール4を楽しみにしています。 – courtsimas