1
мне нужно перечислить Inputs
, которые имеют Translations
с language_id = 1
и не имеют Перевод с language_id = 2
Rails 4 + PostGreSQL - присоединяется стол с 2-мя условиями
Мой текущий объем составляет:
scope :language, -> (id){joins(:translations).where('translations.language_id = 1)}
Модели:
class Input < ActiveRecord::Base
has_many :translations
has_many :languages, through: :translations
scope :language, -> (id) {joins(:translations).where('translations.language_id = 1')}
def translation_from_language(language)
self.translations.where(language: language).take
end
end
class Translation < ActiveRecord::Base
belongs_to :input
belongs_to :language
before_save :default_values
#Apenas para testar o scope de search
scope :search, -> (part) { where("LOWER(value) LIKE ?", "%#{part.downcase}%") }
# Se nao setar um input manualmente, irá criar um novo
def default_values
self.input ||= Input.create
end
end
class Language < ActiveRecord::Base
has_many :translations
has_many :inputs, through: :translations
end
Проблема здесь состоит в том, что второй, где бесполезно, потому что, если строка есть LANGUAGE_ID = 1, necesseraly не имеем LANGUAGE_ID = 2. Я думаю, что мы должны использовать подзапросы, но я не знаю, как. –
Вы хотите запросить вход со всеми трансалиями, у которых есть language_id = 1? –
Мне нужно перечислить Входы, которые имеют переводы, связанные с вводом с помощью language_id = 1, но не имеют переводов, связанных с вводом с language_id = 2 –