rails query includes has_and_belongs_to_many generate active ruby-on-rails-4 rails-models

ruby on rails 4 - query - Rails: error de tipo de herencia de tabla única no válido



rails sql query (2)

Odio tener potenciales errores en el código, especialmente en los procesos iniciales como generar un modelo. Es mejor cambiar la palabra reservada a otra cosa y liberarse para aprovechar la columna de herencia más adelante si surge la necesidad. Aquí se muestra una solución más limpia -> renombrar un nombre de columna de base de datos usando la migración

Se lee;

  1. Ejecute $> los rieles generan la migración ChangeColumnName donde, ChangeColumnName es el nombre de nuestra migración. Esto puede ser cualquier nombre.
  2. Ahora, edite el archivo de migración generado en db / migrate / _change_column_name.rb

    class ChangeColumnName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end

  3. $> rake db: migrate

Tendrá que editar el controlador y ver los archivos, por ejemplo, si el nombre del modelo es Producto, entonces probablemente editará estos archivos.

  1. /app/views/products/_form.html.erb
  2. /app/views/products/show.html.erb
  3. /app/controllers/products_controller.erb
  4. /app/views/products/index.html.erb

Por lo tanto, estoy trabajando en la migración de este sitio php con una base de datos existente que no puedo cambiar a Rails. Hay una tabla: Quotes con una columna llamada type . Cada vez que intento crear un modelo de esto y establecer el tipo, me dice el siguiente error:

ActiveRecord::SubclassNotFound (Invalid single-table inheritance type: HOME is not a subclass of Quotes)

No entiendo por qué cree que es hereditario porque no se supone que lo haga. Mi método de creación se ve así:

quote = Quotes.create( agent_id: agent.id, client_id: client.id, type: ''HOME'', status: 0, date_created: DateTime.now )

Si comento el tipo, todo funciona bien. Pero con los errores Type it.


Resolví esto configurando los modelos inheritance_column en nil. Los modelos de registro activo pueden heredar de una tabla a través del atributo :type , al establecer la herencia_column en nil elimina ese atributo, lo que le permite tener una columna de base de datos llamada type

class Quote < ActiveRecord::Base self.inheritance_column = nil end