簡體   English   中英

Ruby on Rails:如何在兩個表之間搜索?

[英]Ruby on Rails: How do I search between two tables?

我想我首先想到的是使用: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更改為:joins,我得到此錯誤:

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%'))

就像@ house9所說,您需要使用:joins ,而且還需要在查詢的地址字段上使用表名。 因此,您需要的是"addresses.name LIKE '%#{search}%' ..." ,而不是"name LIKE '%#{search}%' ..."等。為清楚起見,您可能希望添加users. 到用戶字段,但這隱含在查詢的構建方式中。

在這些情況下,您應該嘗試的操作是直接在數據庫上運行查詢。 如果它仍然拋出錯誤,那么(這將是),您知道這是您的查詢,而不是您的ruby。

嘗試:joins而不是:include

還檢查log / development.log所有sql都記錄在那里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM