Buscar..


Jugando con mesas utilizando la consola de rieles.


Ver tablas

ActiveRecord::Base.connection.tables

Eliminar cualquier tabla .

    ActiveRecord::Base.connection.drop_table("users")
    ------------OR----------------------
    ActiveRecord::Migration.drop_table(:users)
    ------------OR---------------------
    ActiveRecord::Base.connection.execute("drop table users")

Eliminar índice de la columna existente

 ActiveRecord::Migration.remove_index(:users, :name => 'index_users_on_country')

donde country es un nombre de columna en el archivo de migración con un índice ya agregado en la tabla de users como se muestra a continuación:

 t.string :country,add_index: true

Eliminar restricción de clave externa

ActiveRecord::Base.connection.remove_foreign_key('food_items', 'menus')

donde los menus has_many food_items y menus has_many food_items y sus respectivas migraciones también.

Añadir columna

ActiveRecord::Migration.remove_column :table_name, :column_name

por ejemplo:-

 ActiveRecord::Migration.add_column :profiles, :profile_likes, :integer, :default => 0

Métodos de rieles - devolviendo valores booleanos

Cualquier método en el modelo de Rails puede devolver un valor booleano.

método simple

  ##this method return ActiveRecord::Relation
  def check_if_user_profile_is_complete
    User.includes( :profile_pictures,:address,:contact_detail).where("user.id = ?",self)
  end

De nuevo, un método simple que devuelve valor booleano.

  ##this method return Boolean(NOTE THE !! signs before result)
  def check_if_user_profile_is_complete
    !!User.includes( :profile_pictures,:address,:contact_detail).where("user.id = ?",self)
  end

Entonces, el mismo método ahora devolverá booleano en lugar de cualquier otra cosa :).

Manejo del error - método indefinido `donde 'para #

A veces queremos usar una consulta where en una colección de registros devueltos que no es ActiveRecord::Relation modo, obtenemos el error anterior, ya que la cláusula Where es conocida para ActiveRecord y no para Array .

Hay una solución precisa para esto utilizando Joins .

EJEMPLO : -

Supongamos que necesito encontrar todos los perfiles de usuario (UserProfile) que estén activos y no sean usuarios (User) con un id = 10.

UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).map(&:user).where.not(:id=>10)

Por lo tanto, la consulta anterior fallará después de que el map como map devuelva una array que no funcionará con la cláusula where .

Pero usar uniones, lo hará funcionar,

UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).joins(:user).where.not(:id=>10)

Dado que las joins generarán registros similares como map pero serán ActiveRecord y no un Array .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow