Hello all!
I want to dynamically change table name for some count of my models.
I understand that may be it’s bad practice but I simply need it.
I found some solution that works for somebody:
application.rb:
around_filter :scope_rubrics_partition
def scope_rubrics_partition
Rubric.scope_rubrics_partition do
yield
end
end
class Rubric < ActiveRecord::Base
def self.scope_rubrics_partition
if true
set_table_name ‘dp_ru_rubrics’
# set_primary_key ‘dp_ru_rubrics.id’
else
set_table_name ‘rubrics’
end
yield
ensure
set_table_name ‘rubrics’
end
end
Also patch rails to don’t memoize table_name
reflections.rb:
def table_name
klass.table_name
end
def quoted_table_name
klass.quoted_table_name
end
But now I get an error like:
Mysql::Error: Unknown column ‘rubrics.id’ in ‘order clause’: SELECT
dp_ru_rubrics
.* FROM dp_ru_rubrics
ORDER BY rubrics.id
ASC
LIMIT 0, 15
So, how in the end set table name dynamically in production mode too?
Thank you!
p.s: sorry for poor english)