Frage

Ich habe die folgenden Modelle, in denen ich an dieser Sprache und Produkten Tabelle über die Übersetzungstabelle der Rails has_many mit: durch Paradigma:

class Language < ActiveRecord::Base
  has_many :translations
  has_many :products, :through => :translations
end

class Translation < ActiveRecord::Base
  belongs_to :product
  belongs_to :language
end

class Product < ActiveRecord::Basehas_many :translations
  has_many :translations
  has_many :languages, :through => :translations
end

Ich mag die englische Übersetzung für ein bestimmtes Produkt zu finden.

kann ich Liste die zugehörigen Sprachen und Übersetzungen:

prod = Product.find(4)
en = Language.find(:first, :conditions => { :lang_code => 'en' })

puts prod.translations
puts prod.languages

Diese Ausgabe:

#<Translation:0x11022a4>
#<Translation:0x1102114>
#<Language:0x602070>
#<Language:0x602020>

(Es gibt ein Englisch und Französisch Übersetzung für dieses Produkt.)

Wie kann ich die Übersetzung für prod zum en entsprechenden bekommen Sprache?

Wenn das nicht Sinn machen, hier ist das Äquivalent SQL:

SELECT t.* FROM products p, translations t, languages l WHERE l.id = t.language_id AND p.id = t.product_id AND l.lang_code = 'en';

War es hilfreich?

Lösung

Sie würden etwas in diese brauchen:

product = Product.find(4)
translation = product.translations.find(:first,:joins=>:languages, :conditions=>{:language=>{:lang_code=>'en'}})

Der Code wird produziert eine Verknüpfung von Übersetzungen mit Sprachen und Filter entsprechend Ihrer lang_code.

Wenn die Klammern verwechseln Sie etwas (ich weiß, manchmal tun sie) Sie auch so etwas tun könnte:

translation = product.translations.find(:first,:joins=>:languages, :conditions=>["languages.lang_code like ?",'en'])

Das letzte Bit die gleiche SQL-Abfrage erzeugen sollte, Übersetzungen mit Sprache verbindet und dann durch die lang_code es gefiltert wird.

Andere Tipps

Yaraher Antwort funktioniert, obwohl ich einen einfacheren Weg gefunden, das Gleiche zu erreichen:

t = Translation.find(:first, 
                     :conditions => { :product_id => prod.id, 
                                      :language_id => lang.id })
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top