Ruby on Rails:如何在两个表之间进行搜索?

时间:2010-12-29 17:35:04

标签: ruby-on-rails

我认为我首先想到的是使用:include,但是我收到错误告诉我地址​​表中的所有列都不存在 - 可能是因为它仍然不知道地址表,并且仍在检查用户表。

搜索代码:

search = params[:search]
    conditions = "real_name LIKE '%#{search}%' OR login LIKE '%#{search}%' OR email LIKE '%#{search}%'"
    address_conditions = "number LIKE '%#{search}%' OR street LIKE '%#{search}%' OR city LIKE '%#{search}%' OR state LIKE '%#{search}%' OR zip_code LIKE '%#{search}%'" 
    conditions = conditions + " OR " + address_conditions
    @paid = User.find(:all, :include => :addresses, :conditions => "has_paid = 't' AND (#{conditions})")

编辑:将:include更改为:加入,我收到此错误:

SQLite3::SQLException: no such column: number: 
         SELECT * FROM "users" 
         WHERE (has_paid != 't' AND 
                     (real_name LIKE '%12%' OR login LIKE '%12%' OR email LIKE '%12%' OR
                      number LIKE '%12%' OR street LIKE '%12%' OR city LIKE '%12%' OR
                      state LIKE '%12%' OR zip_code LIKE '%12%'))

2 个答案:

答案 0 :(得分:4)

正如@ house9所说,您需要使用:joins,但您还需要在查询中的地址字段中使用表名。因此,您需要"name LIKE '%#{search}%' ...",而不是"addresses.name LIKE '%#{search}%' ...",等等。为清楚起见,您可能希望将users.添加到用户字段中,但它隐含在构建查询的方式中。

在这些情况下,您应该尝试做的是直接在数据库上运行查询。如果它仍然抛出错误(这会),你知道这是你的查询,而不是你的红宝石。

答案 1 :(得分:1)

尝试:加入而不是:include

还检查log / development.log所有sql都记录在那里