2011-04-06 61 views
5

我正在嘗試學習RoR,構建我的第一個應用程序,一個基本的庫存應用程序。我試過四處搜尋,但找不到正確的語法,所以我想我會問。Rails 3 - 通過名稱而不是id查找

這裏是我的設立:

型號

class Item < ActiveRecord::Base 
belongs_to :supplier 

class Supplier < ActiveRecord::Base 
has_many :items 

項目控制器

@items = Item.find_all_by_supplier_id '1' 

這將返回我想要的數據,但我希望輸入供應商名稱進入控制器,這樣如果ID不匹配,它仍然可以正常工作。

希望這是足夠的信息,謝謝!

回答

17

你可以翻轉你的方法,並再試:

@items = Supplier.find_by_name('THE NAME').items 

Rails的創建動態find_by_ *和搜索find_all_by_ *方法。我不建議您通過supplier_id檢索項目,而是建議您讓rails使用上面的代碼片段中設置的關聯來完成此操作。在內部,這仍然使用supplier_id,但是rails正在處理流程而不是你。

這反過來也是可能的,所以如果你有一個項目,並希望供應商,你可以這樣做:

Item.find(1).supplier 
+0

謝謝先生!這就像一個魅力。 – rmp 2011-04-06 20:16:25

0
@items = Item.joins(:suplier).where(:suplier => { :name => "Suplier name" }) 
0
Supplier.find_by_colname(params[:name]) 

colnameSupplier table column名稱中,我們想檢查我們的參數值。在rails中,我們可以在上面添加find_by_的列名,並且rails會告訴你它是神奇的;)。這裏是參考Doc