Tengo una base de datos heredada que estoy tratando de modelar utilizando Rails. Una de las tablas tiene una columna llamada attributes
, que es un nombre reservado por Rails, creo.¿Cómo puedo ignorar permanentemente una columna de base de datos en mi clase ActiveRecord :: Base?
Aquí es el SQL para la tabla:
CREATE TABLE `album` (
`id` int(11) NOT NULL,
`artist` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`gid` char(36) NOT NULL,
`modpending` int(11) DEFAULT '0',
`attributes` int(11) DEFAULT '0',
...
);
Aquí es mi clase ActiveRecord:
class Album < ActiveRecord::Base
set_table_name "album"
belongs_to :artist
has_many :tracks, :through => :album_tracks
end
Esto es lo que sucede cuando trato de crear una instancia:
[email protected]:~/Sites/logdb (master *)$ rails c
Loading development environment (Rails 3.0.3)
no such file to load -- irbtools
ruby-1.9.2-p0 > x = Album.find_by_name("Champ")
=> #<Album id: 969139, artist: 354493, name: "Champ", gid: "15a9a4b8-9dd9-4f6f-b4e9-7c69948af88f", modpending: 0, attributes: 1100, page: 143735328, language: 120, script: 28, modpending_lang: nil, quality: -1, modpending_qual: 0>
ruby-1.9.2-p0 > x.name
ActiveRecord::DangerousAttributeError: attributes_before_type_cast is defined by ActiveRecord
from /Users/hornairs/.rvm/gems/[email protected]/gems/activerecord-3.0.3/lib/active_record/attribute_methods.rb:23:in `instance_method_already_implemented?'
from /Users/hornairs/.rvm/gems/[email protected]/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:263:in `block (2 levels) in define_attribute_methods'
from /Users/hornairs/.rvm/gems/[email protected]/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:262:in `each'
from /Users/hornairs/.rvm/gems/[email protected]/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:262:in `block in define_attribute_methods'
from /Users/hornairs/.rvm/gems/[email protected]/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:261:in `each'
from /Users/hornairs/.rvm/gems/[email protected]/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:261:in `define_attribute_methods'
from /Users/hornairs/.rvm/gems/[email protected]/gems/activerecord-3.0.3/lib/active_record/attribute_methods.rb:13:in `define_attribute_methods'
from /Users/hornairs/.rvm/gems/[email protected]/gems/activerecord-3.0.3/lib/active_record/attribute_methods.rb:41:in `method_missing'
from /Users/hornairs/.rvm/gems/[email protected]/gems/thwart-0.0.4/lib/thwart/canable.rb:27:in `method_missing'
from (irb):2
from /Users/hornairs/.rvm/gems/[email protected]/gems/railties-3.0.3/lib/rails/commands/console.rb:44:in `start'
from /Users/hornairs/.rvm/gems/[email protected]/gems/railties-3.0.3/lib/rails/commands/console.rb:8:in `start'
from /Users/hornairs/.rvm/gems/[email protected]/gems/railties-3.0.3/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
ruby-1.9.2-p0 >
Se parece que el nombre attributes
está reservado, por lo que me gustaría encontrar una forma de ignorarlo para todos consultas y tienen AR ignorarlo al reflexionar sobre el esquema para definir la clase de modelo. ¿Alguna sugerencia? ¡Gracias!
No conozco la solución, pero encontré un hilo con alguien que tiene el mismo problema:. No estoy seguro de que sea de ayuda. –
Robin