Я использую Ruby on Rails 3.2.2, и я хотел бы знать, возможно ли в методах области «динамически» присоединиться к таблице, только если эта таблица еще не присоединена. Вот оно, у меня есть:
def self.scope_method_name(user)
joins(:joining_association_name).where("joining_table_name.user_id = ?", user.id)
end
Я хотел бы сделать что-то вроде следующего:
# Note: the following code is just a sample in order to understand what I mean.
def self.scope_method_name(user)
if table_is_joined?(joining_table_name)
where("joining_table_name.user_id = ?", user.id)
else
joins(:joining_association_name).where("joining_table_name.user_id = ?", user.id)
end
end
Возможно/рекомендуется ли это сделать? Если да, то как я могу/должен действовать?
Я хотел бы использовать этот подход, чтобы избежать множественных операторов таблицы базы данных в INNER JOIN
запросах SQL(в некоторых случаях кажется, что мои SQL-запросы не работают должным образом, поскольку несколько операторов таблицы)и поэтому использовать scope_method_name
, не заботясь о связанных с запросами SQL проблемах (в моем случае, не заботясь о соединении таблиц базы данных ).
Примечание:Это может вызвать ошибки SQL (, например, такие ошибки, как -, такие как "ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'joining_table_name.user_id' in 'where clause'
" ), когда вы еще не присоединились к таблице базы данных (, например, это может произойти, когда вы запускаете код вродеClassName.scope_method_name(@user)
без предварительного присоединения к joining_association_name
и, следовательно, без присоединения к связанной joining_table_name
таблице ).