Почему бы не использовать named_scopes для обоих?
class Site
named_scope :sites, lambda{|ids| :conditions => "id in (#{ids.join(',')})"}
named_scope :languages, :include => :languages ... (whatever your named scope does)
end
звоните:
Site.sites(session[:sites]).languages
или, если вы хотите вернуть языковые объекты
Site.sites(session[:sites]).languages.collect{|site| site.languages}.flatten
Вы также можете сделать это прямо на объекте Language.
Я использую: соединения, потому что Rails 2.1 разделяется и: включает в себя два запроса, что означает, что мы не можем использовать сайты в условиях:
class Language
named_scope :for_sites, lambda{|site_ids| :joins => 'inner join sites on languages.site_id = sites.id' :conditions => "sites.id in (#{site_ids.join(',')})"}
end
по телефону:
Language.for_sites(session[:sites])
В обоих примерах я предположил, что сессия [: sites] полностью контролируется вами и не подлежит внедрению SQL. Если нет, убедитесь, что вы справляетесь с очисткой идентификатора