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 .