我遇到需要在模型中定义table_name和table_name_prefix的情况,由于某种原因,table_name会覆盖table_name_prefix。
class ScheduleItem < ActiveRecord::Base
self.table_name = "schedule_item"
self.table_name_prefix = 'ACQ_IBM_T.'
end
查询中完全忽略前缀。但是,当我注释掉table_name部分时,会添加前缀。以前有人见过这种奇怪的行为吗?
答案 0 :(得分:4)
在ActiveRecord::ModelSchema::ClassMethods中,table_name
setter将值放入@table_name
:
def table_name=(value)
...
@table_name = value
如果定义table_name
getter只使用@table_name
值:
def table_name
reset_table_name unless defined?(@table_name)
@table_name
end
table_name_prefix
仅用于帮助Rails尝试根据类名猜测表名(在reset_table_name
中)。
如果你有一个Rails无法猜到的表名,你可以这样做:
class ScheduleItem < ActiveRecord::Base
self.table_name = "ACQ_IBM_T.schedule_item"
或者如果您需要在其他地方使用前缀,您可以这样做:
class ScheduleItem < ActiveRecord::Base
self.table_name_prefix = 'ACQ_IBM_T.'
self.table_name = "#{table_name_prefix}schedule_item"