加入参数

时间:2014-05-27 09:30:55

标签: mysql ruby-on-rails activerecord ruby-on-rails-4

我期待Rails' joins方法接受带有字符串和变量参数的数组,因为我曾经习惯where

my_var = 42
Topic.where(["id = ?", my_var])

但是,这不适用于joins

Topic.joins(["LEFT JOIN `wave` ON `wave`.`obj_id` = ?", my_var])

如何为joins操作实现相同的问题(问号将被清理变量替换的字符串)?

2 个答案:

答案 0 :(得分:1)

在rails中,左连接并不是很好。感谢您努力消毒投入。我个人也更进一步,尝试从我的代码中删除任何显式的SQL语句,让它由底层框架处理。

如果您有关系'wave',您可以使用包含:

进行“隐式”左连接
Topic.includes(:wave).references(:wave).where(wave: {object_id: my_var})

或者您可以尝试使用Arel。 an example gist

topics = Topic.arel_table
wave = Wave.arel_table
left_join_wave_on_my_var = topics.join(wave, Arel::Nodes::OuterJoin).
                             on(wave[:obj_id].eq(my_var)).
                             join_sources

Topic.joins(left_join_wave_on_my_var)

答案 1 :(得分:0)

Topic.joins([“LEFT JOIN wave ON waveobj_id =”,“my_var”])

Topic.joins([“LEFT JOIN wave ON waveobj_id =#{my_var}”])