2012-10-04 74 views
0

如何動態建立關聯?例如:Rails:如何動態建立關聯

current_customer.company.association(:tenders).order('created_at DESC') 
+1

你爲什麼要這麼做? ActiveRecord假設你的數據模型不是經常改變形狀... – willglynn

+0

我正在爲我的應用程序構建服務層。所以我需要一個基礎服務類來處理CRUD,就像下面的例子。 – Zeck

回答

2

我猜你想傳遞關聯到其他方法。什麼你正在尋找有發送(:METHOD_NAME,*參數)

所以這將是

passed_in_association = :tenders 
if([:tenders,:orders,:users].include?(passed_in_association)) #for security probably better to add it to a before filter. 
current_customer.company.send(passed_in_association).order('created_at DESC') 
end 
+1

請注意,如果輸入可能來自應用程序之外的某些內容,那麼'send'會引入安全問題,即使沒有參數。例如,嘗試'42.send(:exit!)'。 – willglynn

+0

是的,這就是我要找的。但@willglynn指出它有一個安全問題。 – Zeck

+0

是的,你會想確保用戶不能通過API或HTTP請求傳遞任何東西。 – digidigo

1

我不知道你想要做什麼,但你可以只使用send,如果你想使用一個變量來訪問聯想(它只是另一種方法,畢竟):

current_customer.company.send(:tenders).order('created_at DESC')