can activerecord association with the functional foreign key

109 views
Skip to first unread message

zhijia zhang

unread,
Mar 27, 2014, 4:24:23 AM3/27/14
to rubyonra...@googlegroups.com

As we know the model can associate other model through the foreign key which is assigned or with an “_id” suffix by default. But can we define functional foreign key by ourselves ?

eg:

class Condition < ActiveRecord::Base
  belongs_to :city_info, foreign_key: "substring_index(the_city,',',1)"  
end

class CityInfo < ActiveRecord::Base
end

>> Condition.includes(:city_info).references(:city_info).last

>> Mysql2::Error: Unknown column 'conditions.substring_index(the_city,',',1)' in 'on clause': SELECT  ..... ......`conditions`.`substring_index(the_city,',',1)`  ORDER BY `conditions`.`id` DESC LIMIT 1

It's wrong. How can we achieve this.

I want to retrieve many conditions object, each associates with its first city_info by ActiveRecord with generating a single sql (not n+1

) like this:

select * from conditions left outer join city_info on 
convert(substring_index(conditions.the_city,',',1), unsigned integer) = city_info.id
Reply all
Reply to author
Forward
0 new messages