Возможно ли «динамическое» присоединение к таблице, только если эта таблица еще не присоединена?

Я использую 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таблице ).

7
задан Community 23 May 2017 в 11:54
поделиться