ruby-on-rails - outer - rails joins condition




Параметрированное соединение в Rails 4 (3)

Я думаю, вам стоит попробовать:

Foo.joins("LEFT OUTER JOIN bars ON foo.id = bars.foo_id AND bars.baz = ?", baz)

С большим количеством параметров:

Foo.joins("LEFT OUTER JOIN bars ON foo.id = ? AND bars.baz = ? AND ...", foo, baz, etc...)

Я выполняю ручное join и мне нужно передать параметр в его предложение ON :

Foo.joins("LEFT OUTER JOIN bars ON foos.id = bars.foo_id AND bars.baz = #{baz}")

Есть ли способ передать baz в качестве параметра, чтобы избежать потенциальных проблем с инъекцией? Существует метод sanitize_sql_array , но я не уверен, как его использовать в этом случае.

Примечание. Я не могу использовать, потому что это не одно и то же.


Вы должны быть в безопасности, если вы передадите хэш значений, AR защитит вас от SQL-инъекций, например:

Foo.joins("LEFT OUTER JOIN bars ON foo.id = bars.foo_id").where(bars: {baz: baz})

Просто не используйте строки строк в sql, которые уязвимы для SQL-инъекции.


Модели Active record sanitize метод класса, поэтому вы можете:

Foo.joins("LEFT OUTER JOIN bars ON foos.id = bars.foo_id AND bars.baz = #{Foo.sanitize(baz)}")






left-join