0

RoR を学び始めていますが、理解できない問題があります。Product.find :all を使用すると、DB からすべてのレコードが返されます。しかし、find_by_gender(1) (または 2) を実行したい場合、nil が返されます。データベースに性別の製品が含まれていることは確かです。

私のコードコントローラー:

性別 = params[:性別].to_i

@search_results = Product.find_by_gender(性別)

これはnillを返します。

私は何を間違っていますか?

ご挨拶!

4

3 に答える 3

3

find_by_...最初のレコードを返すかnil、見つからない場合find_all_by_...は、一致するすべてのレコードを返します (ない場合は空の配列を返します)。あなたの場合nil、性別= 1のレコードが見つからないことを意味します。

于 2012-06-25T14:32:54.530 に答える
1

最初にデータを確認してください。
いくつかのサンプル レコードを見て
ください。

Product.all(:limit => 5).each {|product| product.id.to_s + product.gender}

またはSQLに入る

sql> select id, gender from products where id < 6;

性別の値が何であるかを確認する場合は、それらの条件に対してモデルに名前付きスコープを作成できます。たとえば、(rails3) (Product Model - app/models/product.rb)

scope :male where(:gender) = male_value # i.e. 1 or 'M' or 'Male' or whatever
scope :female where(:gender) = female_value # i.e. '2' or 'F' or whatever

次に、どちらを書くProducts.maleか、またはProducts.female!

最後の注意 - ユーザー テーブルに性別を含める必要がありますか? 、またはこれは男性/女性専用の製品ですか?

于 2012-06-25T15:03:55.390 に答える
1

レールコンソールで実行

Product.pluck(:gender)

そして、ARに値があることを知っているので(私は真と偽だと思います)、クエリを使用する必要がありますProduct.find_by_gender(true)

于 2012-06-25T14:50:34.127 に答える