Default scope on associations

Hi all,

Recently i am upgrading one of my rails app to 3.2.6. It seems the dafault_scope with options has been deprecated.

i have a scope like this default_scope :include => [:campaign, :site], :order => :‘sites.name’ in a relational model campaign_site

which giving this error

Mysql2::Error: Unknown column 'sites.name' in 'order clause': SELECT `campaigns`.* FROM `campaigns` INNER JOIN `campaign_sites` ON `campaigns`.`id` = `campaign_sites`.`campaign_id` WHERE `campaign_sites`.`site_id` = 11377 ORDER BY campaigns.name, sites.name
Any idea how to get around this?
Thanks in advance!

Perception 1:

I’m not sure but according to the Sql Query that you put here it seems that there’s a table in your application database called “campaign_sites” not “sites” (or maybe you have another table sites which can’t be perceived from this report here or you’re doing

kind of an aliasing or something!) and if you wanted to order by the name of a campaign site I think you should change the “sites.name” to “campaign_sites.name

Because this query seems straightforward you joined the campaign and campaign_site on the campaign_id (according to your has_many|belongs_to association) and then you want the result to be ordered by campaign_site’s name I guess.

Perception 2: The other perception here form the Sql Query and more specifically the part → “campaign_sites.site_id = 11377” is that site_id is a foreign key to a sites table

in your campaign_sites table and if that’s the case because you didn’t include the “sites” table in your JOIN mechanism then it can’t find sites.name cause there is no sites in the query join result from your tables. (you only have tables → campaigns and campaign_sites in the JOIN)

Hope that helps. But I think a little more explanation about your model relationships (campaign, campaign_sites, [sites if there’s such a thing]) can be helpful so we can understand the problem better and maybe

give you better answers.

Good Luck :wink: