2013-04-29 38 views
0

您將如何實現基於請求模型搜索表​​的方法?複用模型的重用方法

我有一個用戶和車輛表,這兩個表都被分配存儲在設備表中的設備。 我試圖使用相同的方法顯示分配給用戶和車輛的設備。設備表有一個user_id和vehicle_id,顯示設備分配到哪裏。

有什麼辦法可以傳遞一個表變量(它可以是用戶或車輛),然後獲得該變量_id:作爲搜索條件,以顯示分配給用戶或車輛的設備,取決於哪個顯示頁面正在查看 -

def equip(table, id) 
    equip = Equipment.where(table_id: id) 
end 

這樣,傳入的表變量代替where()方法的「表」片,使其爲user_id或vehicle_id?

回答

0

是的,這是可能的:

def equip(table, id) 
    equip = Equipment.where("#{table}_id = ?", id) 
end 

但是,這可能會導致錯誤很快,以前添加一些檢查的東西:

def equip(table, id) 
    if self.columns.map(&:name).include?("#{table}_id") 
    equip = Equipment.where("#{table}_id = ?", id) 
    else 
    # the columns does not exists! 
    end 
end 

說明:

self.columns.map(&:name) # returns the name of all the columns of the model in a array 

用一個例子我的Rails控制檯:

User.columns.map(&:name) 
=> ["id", "username", "profession_id", "external_reference", "authorisation_group", "created_at", "updated_at", "active", "license", "visible"] 
1

由於MrYoshiji表示這是可能的,但我強烈建議調查polymorphic associations

+0

不知道爲什麼我沒有想到這一點開始。我是否正確理解,我可以使用@ vehicle.equipments/@ user.equipments來顯示所有分配的內容? – 2013-04-29 21:49:06

+0

@SamThode yup這裏是一個railscast以及它可以解釋它更清晰http://railscasts.com/episodes/154-polymorphic-association-revised注意它是一個修改的情節,所以你需要一個訂閱。還有一個較大的免費普通覆蓋的校長。 – 2013-04-29 22:18:02

+0

我其實只是在翻看舊的。在那個筆記雖然...我想知道如果我以前應該問這個...多形性可以我有同一件設備分配給用戶和車輛? – 2013-04-29 22:29:18