2010-04-21 85 views
0

我有一個命名作用域(姓名)的名字和姓氏的組合,我想在搜索框中使用它。ruby​​ on rails命名範圍(搜索)

我有下面的代碼:

named_scope :full_name, lambda { |fn| {:joins => :actor, :conditions => ['first_name LIKE ? OR second_name LIKE ?', "%#{fn}%", "%#{fn}%"]} } 

def self.search(search) 
    if search 
    self.find(:all, :conditions => [ 'full_name LIKE ?', "%#{search}%"]) 
    else 
    find(:all) 
    end 
end 

但是,這並不工作,因爲它提供了以下錯誤:

SQLite3::SQLException: no such column: full_name: SELECT * FROM "actors" WHERE (full_name LIKE '%eli dooley%') 

在此先感謝

Houlahan

回答

3

嘗試這個:

def self.search(search) 
    if search 
    self.full_name(search) 
    else 
    find(:all) 
    end 
end 

命名作用域不會向數據庫添加列,而是一種輕鬆訪問的方式,無需每次輸入條件都可以獲取記錄。

1

因爲:conditions散在聲明它不工作:

self.find(:all, :conditions => ['full_name LIKE ?', "%#{search}%"]) 

—正在尋找數據庫中的表名爲full_name實際列。命名範圍(在Rails 3的簡稱範圍)得到實現的模型類的方法,所以不是你需要這樣做:

self.full_name(search) 
+0

我嘗試使用 self.full_name(搜索) ,但現在我在嘗試顯示所有的演員時的錯誤: 協會命名爲「演員」沒有被發現;也許你拼錯了嗎?當在索引頁面中顯示所有參與者時,該參與者將在循環中使用。 – user322406 2010-04-21 15:17:36

+0

這確實是一個單獨的問題。您需要在包含該命名範圍的模型類中發佈關聯代碼。 – 2010-04-21 15:31:20