我期待Rails' joins
方法接受带有字符串和变量参数的数组,因为我曾经习惯where
:
my_var = 42
Topic.where(["id = ?", my_var])
但是,这不适用于joins
:
Topic.joins(["LEFT JOIN `wave` ON `wave`.`obj_id` = ?", my_var])
如何为joins
操作实现相同的问题(问号将被清理变量替换的字符串)?
答案 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 wave
。obj_id
=”,“my_var”])
或
Topic.joins([“LEFT JOIN wave
ON wave
。obj_id
=#{my_var}”])