Hi, when using STI, Do I have to set type column's value explicity or is it set by Rails?
Eduardo Yáñez Parareda wrote:
Hi, when using STI, Do I have to set type column's value explicity or is it set by Rails?
Rails handles it all for you.
Chris
It’s set by rails, assuming you have a type column
It's set by rails, assuming you have a type column
Well, I asked it because I have this migration:
class CreateFormations < ActiveRecord::Migration def self.up create_table :formations do |t| # Esta columna es para soportar herencia entre Formation y TeamFormation t.column :type, :string t.column :name, :string, :limit => 16, :null => false
# Atributos para TeamFormations t.column :match_id, :integer t.column :team_id, :integer end
# Creamos por defecto el tipo de alineación 4-4-2 formation = Formation.create(:name => :'4-4-2') <---- HERE I CREATE AN OBJECT AND formation.save! SAVE IT end
def self.down drop_table :formations end end
Within there I save a new Formation but after that type column is null.
I think that is because it is assumed unless you’re inheriting the model Formation, in your example, you’re creating a new Formation. If you were to create a TeamFormation model -
class TeamFormation < Formation
and then
TeamFormation.create :name => ‘4-4-2’
in your Formation table, it will insert the type TeamFormation. Formation isn’t inheriting anything.
Okay so Formation has your type column then. I don’t believe that you want to be creating objects based on it directly. Try this
class Specialformation < Formation end class Differentformation < Formation end
sf= Specialformation.create(:name => ‘4-4-2’) df = Differentformation.create(:name => ‘3-5-2’) If you peek into your formations table, you should see two new records, with correct type fields.
HTH, Howard