Zoeken…


Spelen met tafels met behulp van rails console


Bekijk tabellen

ActiveRecord::Base.connection.tables

Verwijder een tabel .

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

Verwijder de index uit de bestaande kolom

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

waarbij het country een kolomnaam is in het migratiebestand met de reeds toegevoegde index in de users zoals hieronder weergegeven: -

 t.string :country,add_index: true

Beperking van externe sleutel verwijderen

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

waar menus has_many food_items en hun respectieve migraties bevatten.

Kolom toevoegen

ActiveRecord::Migration.remove_column :table_name, :column_name

bijvoorbeeld:-

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

Rails-methoden - terugkerende Booleaanse waarden

Elke methode in Rails-model kan Booleaanse waarde retourneren.

eenvoudige methode

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

Wederom eenvoudige methode die Booleaanse waarde retourneert-

  ##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

Dus dezelfde methode retourneert nu Boolean in plaats van iets anders :).

Omgaan met de fout - ongedefinieerde methode `waar 'voor #

Soms willen we gebruik maken van een where query op aa verzameling records geretourneerd die niet ActiveRecord::Relation .Hence we de bovenstaande foutmelding als Where clausule weten ActiveRecord en niet te Array .

Er is een precieze oplossing hiervoor door Joins .

VOORBEELD : -

Stel dat ik alle gebruikersprofielen (UserProfile) moet vinden die actief zijn en geen gebruiker (User) met een id = 10 zijn.

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

Dus bovenstaande vraag zal falen na map als map een zal terugkeren array die zal niet werken met where clausule.

Maar het gebruik van joins zorgt ervoor dat het werkt,

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

As joins zullen vergelijkbare records zoals map maar ze zullen ActiveRecord en geen Array .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow