如何在方法中创建动态连接语句?

时间:2013-02-26 19:08:44

标签: ruby-on-rails ruby activerecord

我需要加入一系列表格:

tables = ["users","cars"]

但是,我正试图加入这些:

joins(:users,:cars)

代码无效。在我的模型中,我有一个定义,我在表中传递:

def conditions(tables)
    joins(tables.map { |t| t.to_sym }.join(","))
end

2 个答案:

答案 0 :(得分:5)

此方法适用于splat运算符。

.joins接受一个未定义数量的参数,所以你需要的是一种将数组解构为参数的方法。 .join(",")会把它变成一个字符串,这不是它所期望的。但是,这个:joins(*tables.map(&:to_sym))应该可以解决问题。

答案 1 :(得分:1)

您编写的方法是传递字符串"users, cars",这会引发错误。使用splat(*)运算符:

def conditions(tables)
  joins *tables.map(&:to_sym)
end

http://endofline.wordpress.com/2011/01/21/the-strange-ruby-splat/