我开始学习 RoR,但我有一个我不明白的问题。使用 Product.find :all 返回数据库中的所有记录。但是,如果我想 find_by_gender(1) (甚至 2)它返回一个 nil,我确定 db 包含具有性别的产品
我的代码控制器:
性别 = 参数[:gender].to_i
@search_results = Product.find_by_gender(性别)
这返回零,
我究竟做错了什么?
问候!
我开始学习 RoR,但我有一个我不明白的问题。使用 Product.find :all 返回数据库中的所有记录。但是,如果我想 find_by_gender(1) (甚至 2)它返回一个 nil,我确定 db 包含具有性别的产品
我的代码控制器:
性别 = 参数[:gender].to_i
@search_results = Product.find_by_gender(性别)
这返回零,
我究竟做错了什么?
问候!
find_by_...
返回第一条记录,nil
如果没有找到,则find_all_by_...
返回所有匹配的记录(如果没有,则返回空数组)。在您的情况下nil
,意味着没有找到性别 = 1 的记录。
在 Rails 控制台中执行
Product.pluck(:gender)
而且你会知道它在 AR 中的值(我认为是真假),所以你必须使用查询Product.find_by_gender(true)
首先验证您的数据!
查看一些示例记录:
执行以下操作:
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
!
最后一点 - 性别应该在您的用户表中吗?,或者这是针对男性/女性的特定产品?