我有我需要連接表的數組:如何在方法中創建動態聯接語句?
tables = ["users","cars"]
但是,我試圖做加入這些:
joins(:users,:cars)
的代碼是行不通的。在我的模型中,我有一個定義,我通過表格:
def conditions(tables)
joins(tables.map { |t| t.to_sym }.join(","))
end
我有我需要連接表的數組:如何在方法中創建動態聯接語句?
tables = ["users","cars"]
但是,我試圖做加入這些:
joins(:users,:cars)
的代碼是行不通的。在我的模型中,我有一個定義,我通過表格:
def conditions(tables)
joins(tables.map { |t| t.to_sym }.join(","))
end
此方法將是splat運算符的一個很好的候選者。
.joins
需要一個未定義數量的參數,所以你需要的是一種將數組解析爲參數的方法。 .join(",")
會將它變成一個字符串,這不是它所期望的。但是,這個:joins(*tables.map(&:to_sym))
應該做的伎倆。
你寫的方法是傳遞一個字符串"users, cars"
,這會引發錯誤。使用圖示(*
)操作:
def conditions(tables)
joins *tables.map(&:to_sym)
end
http://endofline.wordpress.com/2011/01/21/the-strange-ruby-splat/
所以,我仍然在學習軌道,但它總是需要導軌加入一個表,即使模型的相關聲明?例如,我在這裏使用的模型已經有has_one:user,:through =>:car和belongs_to:car in place,我想我只是混淆了爲什麼當模型已經建立了關聯時需要這些關聯的表 – 2013-02-26 19:53:23
不,'.joins'關係用於返回所述關聯實際存在的記錄,即不是'nil'。 – 2013-02-26 20:59:44