aboutsummaryrefslogtreecommitdiffstats
path: root/guides
Commit message (Collapse)AuthorAgeFilesLines
* Refactors Active Record connection managementEileen Uchitelle2018-08-301-4/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While the three-tier config makes it easier to define databases for multiple database applications, it quickly became clear to offer full support for multiple databases we need to change the way the connections hash was handled. A three-tier config means that when Rails needed to choose a default configuration (in the case a user doesn't ask for a specific configuration) it wasn't clear to Rails which the default was. I [bandaid fixed this so the rake tasks could work](#32271) but that fix wasn't correct because it actually doubled up the configuration hashes. Instead of attemping to manipulate the hashes @tenderlove and I decided that it made more sense if we converted the hashes to objects so we can easily ask those object questions. In a three tier config like this: ``` development: primary: database: "my_primary_db" animals: database; "my_animals_db" ``` We end up with an object like this: ``` @configurations=[ #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbded10 @env_name="development",@spec_name="primary", @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}>, #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbdea90 @env_name="development",@spec_name="animals", @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}> ]> ``` The configurations setter takes the database configuration set by your application and turns them into an `ActiveRecord::DatabaseConfigurations` object that has one getter - `@configurations` which is an array of all the database objects. The configurations getter returns this object by default since it acts like a hash in most of the cases we need. For example if you need to access the default `development` database we can simply request it as we did before: ``` ActiveRecord::Base.configurations["development"] ``` This will return primary development database configuration hash: ``` { "database" => "my_primary_db" } ``` Internally all of Active Record has been converted to use the new objects. I've built this to be backwards compatible but allow for accessing the hash if needed for a deprecation period. To get the original hash instead of the object you can either add `to_h` on the configurations call or pass `legacy: true` to `configurations. ``` ActiveRecord::Base.configurations.to_h => { "development => { "database" => "my_primary_db" } } ActiveRecord::Base.configurations(legacy: true) => { "development => { "database" => "my_primary_db" } } ``` The new configurations object allows us to iterate over the Active Record configurations without losing the known environment or specification name for that configuration. You can also select all the configs for an env or env and spec. With this we can always ask any object what environment it belongs to: ``` db_configs = ActiveRecord::Base.configurations.configurations_for("development") => #<ActiveRecord::DatabaseConfigurations:0x00007fd1acbdf800 @configurations=[ #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbded10 @env_name="development",@spec_name="primary", @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}>, #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbdea90 @env_name="development",@spec_name="animals", @config={"adapter"=>"sqlite3", "database"=>"db/development.sqlite3"}> ]> db_config.env_name => "development" db_config.spec_name => "primary" db_config.config => { "adapter"=>"sqlite3", "database"=>"db/development.sqlite3" } ``` The configurations object is more flexible than the configurations hash and will allow us to build on top of the connection management in order to add support for primary/replica connections, sharding, and constructing queries for associations that live in multiple databases.
* Merge pull request #33737 from bogdanvlviv/add-6_0_release_notes-guideRafael França2018-08-293-1/+183
|\ | | | | Add "Ruby on Rails 6.0 Release Notes" guide [ci skip]
| * Add "Ruby on Rails 6.0 Release Notes" guide [ci skip]bogdanvlviv2018-08-293-1/+183
| | | | | | | | | | | | | | | | | | This commit adds a skeleton of "Ruby on Rails 6.0 Release Notes". It isn't a good time to add changelogs' entries to this guide since we can redo/revert some things till the final release 6.0. It would be better to do it close to the release. But we already can add mentions about major features that have been added to 6.0. I added mention about "Parallel Testing".
* | Use the HTTPS protocol for links to Edges Guides [ci skip]tleneveu2018-08-283-4/+4
|/ | | | Edges Guides is now available in HTTPS, it would be better to use the HTTPS protocol directly.
* Update "Action View Form Helpers" guide [ci skip]bogdanvlviv2018-08-271-96/+118
|
* Follow up #33523 [ci skip]bogdanvlviv2018-08-271-50/+20
| | | | | | | | | | | This commit is the next work after #33523. Also, this commit removes mention about hidden `utf8` input. Since form helpers don't generate this input by default since #32125. Note that I also had created PR #31972 with improvements to "Action View Form Helpers" guide, but I'll rebase it after merging the current PR.
* Merge pull request #33681 from minaslater/replace-white-and-blacklistAaron Patterson2018-08-239-40/+41
|\ | | | | [ci skip] change all instances of blacklist and whitelist to denylist…
| * [ci skip] corrects more grammar awkwardness, replacing denylist with ↵Mina Slater2018-08-229-37/+41
| | | | | | | | restricted list and consistently use permitted
| * [ci skip] revert terminology related to syntaxMina Slater2018-08-221-1/+1
| |
| * [ci skip] fixes a few more grammar issues, changing a to an before the word ↵Mina Slater2018-08-224-12/+9
| | | | | | | | allowlist
| * [ci skip] fixes awkward grammarMina Slater2018-08-226-12/+12
| |
| * [ci skip] change all instances of blacklist and whitelist to denylist and ↵Mina Slater2018-08-2111-40/+40
| | | | | | | | allowlist
* | Include form_with in form_helpers rails guide (#33523)Nick Schwaderer2018-08-221-53/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Include form_with in form_helpers rails guide * Include form_tag and form_for footnote * Id and class attributes are not wrapped anymore * Include note that all form_with forms are remote:true by default * Underline most common use case of form_with is with arguments * Form_with no longer accepts multiple hashes in form helper calls * Review final sections * Revert extra documentation * Remove unnecessary link
* | Merge pull request #33685 from krusty3002/masterRafael França2018-08-221-0/+7
|\ \ | | | | | | Added explanation about new_framework_defaults.rb file [ci skip]
| * | Fixed file name [ci skip]Claas Zurawski2018-08-221-1/+1
| | |
| * | Added explanation about new_framework_defaults.rb file [ci skip]Claas Zurawski2018-08-221-0/+7
| | |
* | | Add database configuration to disable advisory locks.Guo Xiang Tan2018-08-221-1/+10
|/ / | | | | | | https://github.com/rails/rails/issues/31190
* / Add missing newline [ci skip]George Claghorn2018-08-211-0/+1
|/
* [ci skip] Add ImageMagick to ActiveStorage dependenciesMr. Outis2018-08-211-1/+13
| | | | | In order to run ActiveStorage's tests successfully, you need imagemagick.
* Improve documentation of Procs as :if / :unless options for callbacksFabian Schwahn2018-08-201-0/+8
|
* Merge pull request #33621 from sikachu/sikachu-guide-rubocopRichard Schneeman2018-08-191-2/+13
|\ | | | | Update guide to mention code linters available
| * Update guide to mention code linters availablePrem Sichanugrist2018-08-151-2/+13
| | | | | | | | | | | | | | Contributors can run RuboCop locally to catch code style error in Ruby code and npm lint task for `rails-ujs` CoffeeScript and JavaScript code. [skip ci]
* | DRY in Active Record Query Interface [ci skip]bogdanvlviv2018-08-191-16/+0
| | | | | | | | | | | | | | | | | | | | | | The sentence "This is exactly the same as defining a class method ..." is not true, so #33653 fixed it, but added changes repeat what is explained a few lines below. We can remove this part since a user is able to get info about the difference between scopes and class methods below. Context https://github.com/rails/rails/pull/33653#discussion_r211105969. Reverts #33653, 97feb4996b1c88f770101dfce6d4d3a6baf6bb33.
* | Fix syntax error in the doc [ci skip]Ryuta Kamizono2018-08-191-1/+1
| |
* | Merge pull request #33653 from LemonAndroid/patch-1Richard Schneeman2018-08-191-3/+9
|\ \ | | | | | | Explained difference between scope & class method
| * | Explained difference between scope & class methodLemonAndroid2018-08-191-3/+9
| | |
* | | Update `google-cloud-storage` gem version [ci skip]yuuji.yaginuma2018-08-191-1/+1
|/ / | | | | | | Now requires version 1.11 or newer. Ref: bf5f41d948b6f3f27db7fdc2b70897aec991065f
* | Enable Style/ParenthesesAroundCondition copRyuta Kamizono2018-08-191-2/+2
| | | | | | | | To prevent style check in review like https://github.com/rails/rails/pull/33608#discussion_r211087605.
* | [skip ci] Fix overlapping text in the guideArye Dov Eidelman2018-08-171-1/+5
| | | | | | | | Fix a layout issue in the rails guides, where the navigation covers the main text, if the page is between 800 and 960 pixels wide. (issue #33406)
* | Merge pull request #33537 from ↵Ryuta Kamizono2018-08-171-0/+15
|\ \ | | | | | | | | | | | | | | | ZASMan/update_action_mailer_docs_custom_view_paths Add note for custom mailer view paths in action mailer guide. [ci skip]
| * | Add note for custom mailer view paths in action mailer guide. [ci skip]Zane2018-08-161-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds stuff Fixes a typo Integrates changes Adds link to append_view_path in actionmailer guide.
* | | Harmonize shell commands in dev guide [ci skip]Anton Rieder2018-08-161-7/+7
| |/ |/|
* | Add `Array#extract!`bogdanvlviv2018-08-141-0/+13
| | | | | | | | | | | | | | | | | | | | | | The method removes and returns the elements for which the block returns a true value. If no block is given, an Enumerator is returned instead. ``` numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] odd_numbers = numbers.extract! { |number| number.odd? } # => [1, 3, 5, 7, 9] numbers # => [0, 2, 4, 6, 8] ```
* | Fix header setting doc in testing guide [ci skip]Darren2018-08-131-3/+2
| |
* | Clarify "Old Migrations" in "Active Record Migrations" guide [ci skip]bogdanvlviv2018-08-121-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | - Name rails app' files relatively to its root - `structure.sql` => `db/structure.sql` - `schema.rb` => `db/schema.rb` - Clarify rails commands - `db:migrate` => `rails db:migrate` - `db:migrate:status` => `rails db:migrate:status` - Add `/` to the end of `db/migrate` in order to express that it is directory and to keep consistency with `db/migrate/` above. Follow up #33474
* | Clarify note that SQLite3 adapter doesn't support `add_foreign_key` [ci skip]bogdanvlviv2018-08-121-3/+2
| | | | | | | | | | | | Context https://github.com/rails/rails/pull/33563#discussion_r208891486. Follow up #33563
* | Merge pull request #33474 from olivierlacan/old-migrationsRichard Schneeman2018-08-111-3/+22
|\ \ | | | | | | Document best practices with old migrations
| * | Document best practices with old migrationsOlivier Lacan2018-08-031-3/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The copy here is of course up for discussion but it feels like we need to address the issue of old migrations in the Migration guide because other than mentioning the canonical nature of schema.rb/structure.sql or the actual database compared to migration files, it seems like more guidance would help. Here's a sample of the kinds of question people seem to often ask about old Rails migrations: - https://stackoverflow.com/questions/20119391/delete-old-migrations-files-in-a-rails-app - https://www.reddit.com/r/rails/comments/4ayosd/compacting_migrations_files_or_delete_them/ - https://stackoverflow.com/questions/4248682/is-it-a-good-idea-to-purge-old-rails-migration-files - https://stackoverflow.com/questions/707013/is-it-a-good-idea-to-collapse-old-rails-migrations - https://stackoverflow.com/questions/1981777/rails-remove-old-models-with-migrations - https://stackoverflow.com/questions/3343534/rebase-rails-migrations-in-a-long-running-project The common theme seems to be: "I've got old migrations, should I keep them around on an old project?". My personal stance is that as long as migrations run and don't take too long do so, you should keep them around since it allows people working on the Rails project with you to seamlessly upgrade their local development database without having to do a `db:drop db:schema:load` and lose all their seed data. While writing down this suggested new section it felt like I was describing a very cumbersome process that could be address with a rake task like: ```bash rails db:migrate:remove VERSION=20121201123456 ``` It rollback to the version just before `20121201123456`, delete the migration file, and run `db:migrate` to get back to the latest migration. This of course doesn't address a situation when someone would want to delete or merge all migrations prior to a certain date, which is addressed by [squasher](https://github.com/jalkoby/squasher). I'm not sure this is something we want to encourage people to do. Although I feel like with more and more production Rails apps over 5-years old, it's definitely a concern we should address.
* | | Merge pull request #33563 from lzap/foreign-key-note-docRichard Schneeman2018-08-111-0/+4
|\ \ \ | | | | | | | | ActiveRecord Guide - sqlite3 foreign keys note
| * | | ActiveRecord Guide - sqlite3 foreign keys noteLukas Zapletal2018-08-091-0/+4
| | | |
* | | | Add missing instructions for FreeBSD [ci skip]Robin Dupret2018-08-091-10/+18
|/ / / | | | | | | | | | | | | | | | | | | | | | The development dependencies installation guides have the installation instructions for FreeBSD in other sections so let's be consistent regarding the dependencies for Active Storage setup. Also fix a few typos.
* | | Merge pull request #33554 from ↵Eileen M. Uchitelle2018-08-081-1/+1
|\ \ \ | |_|/ |/| | | | | | | | saveriomiroddi/sav-correct_updated_at_guide_explanation ActiveRecord Basics guide: correct explanation of the `updated_at` logic [ci skip]
| * | ActiveRecord Basics guide: correct explanation of the `updated_at` logic [ci ↵Saverio Miroddi2018-08-081-1/+1
| | | | | | | | | | | | | | | | | | skip] It's misleanding/incorrect to state that `updated_at` is set on updates, since creation != update (and the column is actually set on creation, too).
* | | Add lambdas in conditional validationsAna María Martínez Gómez2018-08-071-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | As `Lambdas` are a type of `Proc`, they can also be used in the `if`/`unless` option of a validation to decide when the validation is executed. Add this case to the guide for clarification. Closes https://github.com/rails/rails/issues/33212
* | | Merge pull request #33507 from jackc/patch-1George Claghorn2018-08-031-1/+1
|\ \ \ | | | | | | | | Fix file upload location recommendation
| * | | Fix file upload location recommendationJack Christensen2018-08-011-1/+1
| | | | | | | | | | | | Going one level downwards from Rails' /public directory would still be inside the public directory and therefore servable by the web server. Files should stored upwards of the public directory.
* | | | Merge pull request #33452 from thetizzo/rails_32_to_40_doc_updateGeorge Claghorn2018-08-031-0/+11
|\ \ \ \ | | | | | | | | | | [Documentation] Mention default HTTP headers in Rails 3.2 to 4.0 upgrade guide
| * | | | Update Rails 3.2 to 4.0 upgrade guide to include a mention and tip for ↵thetizzo2018-08-031-0/+11
| | | | | | | | | | | | | | | | | | | | handling the addition of configurable default HTTP headers. [ci skip]
* | | | | [ci skip] Update adding member routes guide to fix inconsistency with the ↵Ryan Brooks2018-08-031-1/+1
| |/ / / |/| | | | | | | | | | | implementation. Closes #33518
* | | | Revert "Remove label 'work in progress' for AM and AV guides"Xavier Noria2018-07-311-0/+2
| | | |