0

我开始学习 RoR,但我有一个我不明白的问题。使用 Product.find :all 返回数据库中的所有记录。但是,如果我想 find_by_gender(1) (甚至 2)它返回一个 nil,我确定 db 包含具有性别的产品

我的代码控制器:

性别 = 参数[:gender].to_i

@search_results = Product.find_by_gender(性别)

这返回零,

我究竟做错了什么?

问候!

4

3 回答 3

3

find_by_...返回第一条记录,nil如果没有找到,则find_all_by_...返回所有匹配的记录(如果没有,则返回空数组)。在您的情况下nil,意味着没有找到性别 = 1 的记录。

于 2012-06-25T14:32:54.530 回答
1

在 Rails 控制台中执行

Product.pluck(:gender)

而且你会知道它在 AR 中的值(我认为是真假),所以你必须使用查询Product.find_by_gender(true)

于 2012-06-25T14:50:34.127 回答
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.maleProducts.female

最后一点 - 性别应该在您的用户表中吗?,或者这是针对男性/女性的特定产品?

于 2012-06-25T15:03:55.390 回答