我开始学习RoR,但我遇到了一个我不明白的问题。使用Product.find:all返回DB中的所有记录。但是,如果我想find_by_gender(1)(或甚至2)它返回一个零,我确定该数据库包含具有性别的产品
我的代码控制器:
性别=参数[:性别] .to_i
@search_results = Product.find_by_gender(性别)
这会返回一个nill,
我做错了什么?
问候!
答案 0 :(得分:3)
find_by_...
返回第一条记录或nil
如果找不到,find_all_by_...
返回所有匹配的记录(如果没有则返回空数组)。在您的情况下,nil
表示没有找到性别= 1的记录。
答案 1 :(得分:1)
在rails控制台中执行
Product.pluck(:gender)
你会知道AR中的值是否存在(我认为是真的和假的),所以你必须使用查询Product.find_by_gender(true)
答案 2 :(得分:1)
首先验证您的数据!
看一些样本记录:
做类似的事情:
Product.all(:limit => 5).each {|product| product.id.to_s + product.gender}
或进入sql
sql> select id, gender from products where id < 6;
如果要验证性别值是什么,则可以在模型中为这些条件创建命名范围,例如: (Rails3中)
(产品型号 - 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
!
最后注意事项 - 性别应该在您的用户表中吗? ,或者这是针对男性/女性的特定产品吗?