Ruby on Rails
Rails Cookbook - Geavanceerde recepten / lessen en codeertechnieken voor rails
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
.