Rails single table inheritance with lowercase type names

I'm working up an app that interfaces with a legacy database which has a type column used for single table inheritance. This database is still used by an existing PHP application so I have to work with what is there. I'm trying to set up some models for this and one of the key tables is set up with an STI scheme and a type column, however, all of the types in that column are entirely lowercase.

In my testing so far, rails works fine with the type column if I change the value to match the class name (for example, Claimant instead of claimant). However I don't want to go changing those values in the production database even though it would probably be ok, nor do I want to have to go in and modify the legacy app to save the names differently...

In order to fix this I have two questions...

1) Is there anyway I can configure the model to recognize that type = 'claimant' maps to class = 'Claimant'?

2) failing that, is there a way I can tell rails to not use STI on this table even though it has a type column?

I've done some googling and haven't come up with much yet...


I haven't tried this in an STI setting, but when using a legacy table I was able to use the method "set_table_name" on the ActiveRecord model.

class Claimant < ActiveRecord::Base
  set_table_name 'claimant'
end

Or with a custom method:

def table_name
  'claimant'
end

Apologies I haven't got an STI table handy to test this on, but thought it might help solve your problem.

In answer to the second part of your question, I believe you can disable Rails looking at the type column, by just specifying a non-existant column name.

class Claimant < ActiveRecord::Base
  inheritance_column = :_type_column_disabled
end
链接地址: http://www.djcxy.com/p/49726.html

上一篇: 检查记录时在控制台中发生错误

下一篇: Rails单表继承与小写类型名称