使用find_by搜索时,Rails返回nil

时间:2012-06-25 14:23:23

标签: ruby-on-rails ruby find

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

我的代码控制器:

  

性别=参数[:性别] .to_i

     

@search_results = Product.find_by_gender(性别)

这会返回一个nill,

我做错了什么?

问候!

3 个答案:

答案 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.maleProducts.female

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