diff options
Diffstat (limited to 'guides/source')
| -rw-r--r-- | guides/source/3_0_release_notes.md | 2 | ||||
| -rw-r--r-- | guides/source/3_1_release_notes.md | 2 | ||||
| -rw-r--r-- | guides/source/4_2_release_notes.md | 2 | ||||
| -rw-r--r-- | guides/source/active_record_callbacks.md | 4 | ||||
| -rw-r--r-- | guides/source/active_record_validations.md | 36 | ||||
| -rw-r--r-- | guides/source/active_storage_overview.md | 2 | ||||
| -rw-r--r-- | guides/source/active_support_core_extensions.md | 32 | ||||
| -rw-r--r-- | guides/source/asset_pipeline.md | 5 | ||||
| -rw-r--r-- | guides/source/association_basics.md | 26 | ||||
| -rw-r--r-- | guides/source/caching_with_rails.md | 4 | ||||
| -rw-r--r-- | guides/source/command_line.md | 5 | ||||
| -rw-r--r-- | guides/source/configuring.md | 5 | ||||
| -rw-r--r-- | guides/source/contributing_to_ruby_on_rails.md | 2 | ||||
| -rw-r--r-- | guides/source/generators.md | 5 | ||||
| -rw-r--r-- | guides/source/getting_started.md | 3 | ||||
| -rw-r--r-- | guides/source/testing.md | 2 | ||||
| -rw-r--r-- | guides/source/upgrading_ruby_on_rails.md | 2 | ||||
| -rw-r--r-- | guides/source/working_with_javascript_in_rails.md | 4 | 
18 files changed, 76 insertions, 67 deletions
| diff --git a/guides/source/3_0_release_notes.md b/guides/source/3_0_release_notes.md index e793146c2c..e936644daf 100644 --- a/guides/source/3_0_release_notes.md +++ b/guides/source/3_0_release_notes.md @@ -38,7 +38,7 @@ If you're upgrading an existing application, it's a great idea to have good test  Rails 3.0 requires Ruby 1.8.7 or higher. Support for all of the previous Ruby versions has been dropped officially and you should upgrade as early as possible. Rails 3.0 is also compatible with Ruby 1.9.2. -TIP: Note that Ruby 1.8.7 p248 and p249 have marshaling bugs that crash Rails 3.0. Ruby Enterprise Edition have these fixed since release 1.8.7-2010.02 though. On the 1.9 front, Ruby 1.9.1 is not usable because it outright segfaults on Rails 3.0, so if you want to use Rails 3 with 1.9.x jump on 1.9.2 for smooth sailing. +TIP: Note that Ruby 1.8.7 p248 and p249 have marshalling bugs that crash Rails 3.0. Ruby Enterprise Edition have these fixed since release 1.8.7-2010.02 though. On the 1.9 front, Ruby 1.9.1 is not usable because it outright segfaults on Rails 3.0, so if you want to use Rails 3 with 1.9.x jump on 1.9.2 for smooth sailing.  ### Rails Application object diff --git a/guides/source/3_1_release_notes.md b/guides/source/3_1_release_notes.md index 8c3dc3454d..d6981656ee 100644 --- a/guides/source/3_1_release_notes.md +++ b/guides/source/3_1_release_notes.md @@ -26,7 +26,7 @@ If you're upgrading an existing application, it's a great idea to have good test  Rails 3.1 requires Ruby 1.8.7 or higher. Support for all of the previous Ruby versions has been dropped officially and you should upgrade as early as possible. Rails 3.1 is also compatible with Ruby 1.9.2. -TIP: Note that Ruby 1.8.7 p248 and p249 have marshaling bugs that crash Rails. Ruby Enterprise Edition have these fixed since release 1.8.7-2010.02 though. On the 1.9 front, Ruby 1.9.1 is not usable because it outright segfaults, so if you want to use 1.9.x jump on 1.9.2 for smooth sailing. +TIP: Note that Ruby 1.8.7 p248 and p249 have marshalling bugs that crash Rails. Ruby Enterprise Edition have these fixed since release 1.8.7-2010.02 though. On the 1.9 front, Ruby 1.9.1 is not usable because it outright segfaults, so if you want to use 1.9.x jump on 1.9.2 for smooth sailing.  ### What to update in your apps diff --git a/guides/source/4_2_release_notes.md b/guides/source/4_2_release_notes.md index f7c40d19e9..51d06bd07d 100644 --- a/guides/source/4_2_release_notes.md +++ b/guides/source/4_2_release_notes.md @@ -44,7 +44,7 @@ to their respective adapters. Active Job comes pre-configured with an inline  runner that executes jobs right away.  Jobs often need to take Active Record objects as arguments. Active Job passes -object references as URIs (uniform resource identifiers) instead of marshaling +object references as URIs (uniform resource identifiers) instead of marshalling  the object itself. The new [Global ID](https://github.com/rails/globalid)  library builds URIs and looks up the objects they reference. Passing Active  Record objects as job arguments just works by using Global ID internally. diff --git a/guides/source/active_record_callbacks.md b/guides/source/active_record_callbacks.md index 5946acb412..ebdee446f9 100644 --- a/guides/source/active_record_callbacks.md +++ b/guides/source/active_record_callbacks.md @@ -435,7 +435,9 @@ class PictureFile < ApplicationRecord  end  ``` -WARNING. The `after_commit` and `after_rollback` callbacks are called for all models created, updated, or destroyed within a transaction block. However, if an exception is raised within one of these callbacks, the exception will bubble up and any remaining `after_commit` or `after_rollback` methods will _not_ be executed. As such, if your callback code could raise an exception, you'll need to rescue it and handle it within the callback in order to allow other callbacks to run. +WARNING. When a transaction completes, the `after_commit` or `after_rollback` callbacks are called for all models created, updated, or destroyed within that transaction. However, if an exception is raised within one of these callbacks, the exception will bubble up and any remaining `after_commit` or `after_rollback` methods will _not_ be executed. As such, if your callback code could raise an exception, you'll need to rescue it and handle it within the callback in order to allow other callbacks to run. + +WARNING. The code executed within `after_commit` or `after_rollback` callbacks is itself not enclosed within a transaction.  WARNING. Using both `after_create_commit` and `after_update_commit` in the same model will only allow the last callback defined to take effect, and will override all others. diff --git a/guides/source/active_record_validations.md b/guides/source/active_record_validations.md index 3f13ef8d10..c98f24d786 100644 --- a/guides/source/active_record_validations.md +++ b/guides/source/active_record_validations.md @@ -844,9 +844,9 @@ class Person < ApplicationRecord  end  ``` -You can also use `on:` to define custom context. -Custom contexts need to be triggered explicitly -by passing name of the context to `valid?`, `invalid?` or `save`. +You can also use `on:` to define custom contexts. Custom contexts need to be +triggered explicitly by passing the name of the context to `valid?`, +`invalid?`, or `save`.  ```ruby  class Person < ApplicationRecord @@ -854,14 +854,32 @@ class Person < ApplicationRecord    validates :age, numericality: true, on: :account_setup  end -person = Person.new +person = Person.new(age: 'thirty-three') +person.valid? # => true +person.valid?(:account_setup) # => false +person.errors.messages + # => {:email=>["has already been taken"], :age=>["is not a number"]}  ``` -`person.valid?(:account_setup)` executes both the validations -without saving the model. And `person.save(context: :account_setup)` -validates `person` in `account_setup` context before saving. -On explicit triggers, model is validated by -validations of only that context and validations without context. +`person.valid?(:account_setup)` executes both the validations without saving +the model. `person.save(context: :account_setup)` validates `person` in the +`account_setup` context before saving. + +When triggered by an explicit context, validations are run for that context, +as well as any validations _without_ a context. + +```ruby +class Person < ApplicationRecord +  validates :email, uniqueness: true, on: :account_setup +  validates :age, numericality: true, on: :account_setup +  validates :name, presence: true +end + +person = Person.new +person.valid?(:account_setup) # => false +person.errors.messages + # => {:email=>["has already been taken"], :age=>["is not a number"], :name=>["can't be blank"]} +```  Strict Validations  ------------------ diff --git a/guides/source/active_storage_overview.md b/guides/source/active_storage_overview.md index 1c15d075b9..71ba6184e0 100644 --- a/guides/source/active_storage_overview.md +++ b/guides/source/active_storage_overview.md @@ -58,6 +58,8 @@ amazon:    service: S3    access_key_id: ""    secret_access_key: "" +  bucket: "" +  region: "" # e.g. 'us-east-1'  ```  Tell Active Storage which service to use by setting diff --git a/guides/source/active_support_core_extensions.md b/guides/source/active_support_core_extensions.md index f9fc7044ba..6b0554bb5f 100644 --- a/guides/source/active_support_core_extensions.md +++ b/guides/source/active_support_core_extensions.md @@ -590,9 +590,9 @@ NOTE: Defined in `active_support/core_ext/module/attribute_accessors.rb`.  ### Parents -#### `parent` +#### `module_parent` -The `parent` method on a nested named module returns the module that contains its corresponding constant: +The `module_parent` method on a nested named module returns the module that contains its corresponding constant:  ```ruby  module X @@ -603,19 +603,19 @@ module X  end  M = X::Y::Z -X::Y::Z.parent # => X::Y -M.parent       # => X::Y +X::Y::Z.module_parent # => X::Y +M.module_parent       # => X::Y  ``` -If the module is anonymous or belongs to the top-level, `parent` returns `Object`. +If the module is anonymous or belongs to the top-level, `module_parent` returns `Object`. -WARNING: Note that in that case `parent_name` returns `nil`. +WARNING: Note that in that case `module_parent_name` returns `nil`.  NOTE: Defined in `active_support/core_ext/module/introspection.rb`. -#### `parent_name` +#### `module_parent_name` -The `parent_name` method on a nested named module returns the fully qualified name of the module that contains its corresponding constant: +The `module_parent_name` method on a nested named module returns the fully qualified name of the module that contains its corresponding constant:  ```ruby  module X @@ -626,19 +626,19 @@ module X  end  M = X::Y::Z -X::Y::Z.parent_name # => "X::Y" -M.parent_name       # => "X::Y" +X::Y::Z.module_parent_name # => "X::Y" +M.module_parent_name       # => "X::Y"  ``` -For top-level or anonymous modules `parent_name` returns `nil`. +For top-level or anonymous modules `module_parent_name` returns `nil`. -WARNING: Note that in that case `parent` returns `Object`. +WARNING: Note that in that case `module_parent` returns `Object`.  NOTE: Defined in `active_support/core_ext/module/introspection.rb`. -#### `parents` +#### `module_parents` -The method `parents` calls `parent` on the receiver and upwards until `Object` is reached. The chain is returned in an array, from bottom to top: +The method `module_parents` calls `module_parent` on the receiver and upwards until `Object` is reached. The chain is returned in an array, from bottom to top:  ```ruby  module X @@ -649,8 +649,8 @@ module X  end  M = X::Y::Z -X::Y::Z.parents # => [X::Y, X, Object] -M.parents       # => [X::Y, X, Object] +X::Y::Z.module_parents # => [X::Y, X, Object] +M.module_parents       # => [X::Y, X, Object]  ```  NOTE: Defined in `active_support/core_ext/module/introspection.rb`. diff --git a/guides/source/asset_pipeline.md b/guides/source/asset_pipeline.md index bf046a3341..66cf9da33b 100644 --- a/guides/source/asset_pipeline.md +++ b/guides/source/asset_pipeline.md @@ -184,9 +184,8 @@ the file `scaffolds.css` (or `scaffolds.scss` if `sass-rails` is in the  `Gemfile`.)  For example, if you generate a `ProjectsController`, Rails will also add a new -file at `app/assets/javascripts/projects.coffee` and another at -`app/assets/stylesheets/projects.scss`. By default these files will be ready -to use by your application immediately using the `require_tree` directive. See +file at `app/assets/stylesheets/projects.scss`. By default these files will be +ready to use by your application immediately using the `require_tree` directive. See  [Manifest Files and Directives](#manifest-files-and-directives) for more details  on require_tree. diff --git a/guides/source/association_basics.md b/guides/source/association_basics.md index 008c7345e9..a2231c55d7 100644 --- a/guides/source/association_basics.md +++ b/guides/source/association_basics.md @@ -1075,13 +1075,13 @@ end  You can use the `includes` method to specify second-order associations that should be eager-loaded when this association is used. For example, consider these models:  ```ruby -class LineItem < ApplicationRecord +class Chapter < ApplicationRecord    belongs_to :book  end  class Book < ApplicationRecord    belongs_to :author -  has_many :line_items +  has_many :chapters  end  class Author < ApplicationRecord @@ -1089,16 +1089,16 @@ class Author < ApplicationRecord  end  ``` -If you frequently retrieve authors directly from line items (`@line_item.book.author`), then you can make your code somewhat more efficient by including authors in the association from line items to books: +If you frequently retrieve authors directly from chapters (`@chapter.book.author`), then you can make your code somewhat more efficient by including authors in the association from chapters to books:  ```ruby -class LineItem < ApplicationRecord +class Chapter < ApplicationRecord    belongs_to :book, -> { includes :author }  end  class Book < ApplicationRecord    belongs_to :author -  has_many :line_items +  has_many :chapters  end  class Author < ApplicationRecord @@ -1779,8 +1779,8 @@ The `group` method supplies an attribute name to group the result set by, using  ```ruby  class Author < ApplicationRecord -  has_many :line_items, -> { group 'books.id' }, -                        through: :books +  has_many :chapters, -> { group 'books.id' }, +                      through: :books  end  ``` @@ -1795,27 +1795,27 @@ end  class Book < ApplicationRecord    belongs_to :author -  has_many :line_items +  has_many :chapters  end -class LineItem < ApplicationRecord +class Chapter < ApplicationRecord    belongs_to :book  end  ``` -If you frequently retrieve line items directly from authors (`@author.books.line_items`), then you can make your code somewhat more efficient by including line items in the association from authors to books: +If you frequently retrieve chapters directly from authors (`@author.books.chapters`), then you can make your code somewhat more efficient by including chapters in the association from authors to books:  ```ruby  class Author < ApplicationRecord -  has_many :books, -> { includes :line_items } +  has_many :books, -> { includes :chapters }  end  class Book < ApplicationRecord    belongs_to :author -  has_many :line_items +  has_many :chapters  end -class LineItem < ApplicationRecord +class Chapter < ApplicationRecord    belongs_to :book  end  ``` diff --git a/guides/source/caching_with_rails.md b/guides/source/caching_with_rails.md index 8aaa71c557..321eee637f 100644 --- a/guides/source/caching_with_rails.md +++ b/guides/source/caching_with_rails.md @@ -362,7 +362,7 @@ This class provides the foundation for interacting with the cache in Rails. This  The main methods to call are `read`, `write`, `delete`, `exist?`, and `fetch`. The fetch method takes a block and will either return an existing value from the cache, or evaluate the block and write the result to the cache if no value exists. -There are some common options used by all cache implementations. These can be passed to the constructor or the various methods to interact with entries. +There are some common options that can be used by all cache implementations. These can be passed to the constructor or the various methods to interact with entries.  * `:namespace` - This option can be used to create a namespace within the cache store. It is especially useful if your application shares a cache with other applications. @@ -370,7 +370,7 @@ There are some common options used by all cache implementations. These can be pa  * `:compress_threshold` - Defaults to 1kB. Cache entries larger than this threshold, specified in bytes, are compressed. -* `:expires_in` - This option sets an expiration time in seconds for the cache entry when it will be automatically removed from the cache. +* `:expires_in` - This option sets an expiration time in seconds for the cache entry, if the cache store supports it, when it will be automatically removed from the cache.  * `:race_condition_ttl` - This option is used in conjunction with the `:expires_in` option. It will prevent race conditions when cache entries expire by preventing multiple processes from simultaneously regenerating the same entry (also known as the dog pile effect). This option sets the number of seconds that an expired entry can be reused while a new value is being regenerated. It's a good practice to set this value if you use the `:expires_in` option. diff --git a/guides/source/command_line.md b/guides/source/command_line.md index 7fa0a49203..5fd3ad17de 100644 --- a/guides/source/command_line.md +++ b/guides/source/command_line.md @@ -185,7 +185,7 @@ The controller generator is expecting parameters in the form of `generate contro  ```bash  $ rails generate controller Greetings hello       create  app/controllers/greetings_controller.rb -      route  get "greetings/hello" +      route  get 'greetings/hello'       invoke  erb       create    app/views/greetings       create    app/views/greetings/hello.html.erb @@ -193,9 +193,8 @@ $ rails generate controller Greetings hello       create    test/controllers/greetings_controller_test.rb       invoke  helper       create    app/helpers/greetings_helper.rb +     invoke    test_unit       invoke  assets -     invoke    coffee -     create      app/assets/javascripts/greetings.coffee       invoke    scss       create      app/assets/stylesheets/greetings.scss  ``` diff --git a/guides/source/configuring.md b/guides/source/configuring.md index 18a377a02e..812565b207 100644 --- a/guides/source/configuring.md +++ b/guides/source/configuring.md @@ -119,12 +119,11 @@ defaults to `:debug` for all environments. The available log levels are: `:debug  * `config.logger` is the logger that will be used for `Rails.logger` and any related Rails logging such as `ActiveRecord::Base.logger`. It defaults to an instance of `ActiveSupport::TaggedLogging` that wraps an instance of `ActiveSupport::Logger` which outputs a log to the `log/` directory. You can supply a custom logger, to get full compatibility you must follow these guidelines:    * To support a formatter, you must manually assign a formatter from the `config.log_formatter` value to the logger.    * To support tagged logs, the log instance must be wrapped with `ActiveSupport::TaggedLogging`. -  * To support silencing, the logger must include `LoggerSilence` and `ActiveSupport::LoggerThreadSafeLevel` modules. The `ActiveSupport::Logger` class already includes these modules. +  * To support silencing, the logger must include `ActiveSupport::LoggerSilence`  module. The `ActiveSupport::Logger` class already includes these modules.      ```ruby      class MyLogger < ::Logger -      include ActiveSupport::LoggerThreadSafeLevel -      include LoggerSilence +      include ActiveSupport::LoggerSilence      end      mylogger           = MyLogger.new(STDOUT) diff --git a/guides/source/contributing_to_ruby_on_rails.md b/guides/source/contributing_to_ruby_on_rails.md index e2493ad5f6..01848bdc11 100644 --- a/guides/source/contributing_to_ruby_on_rails.md +++ b/guides/source/contributing_to_ruby_on_rails.md @@ -135,7 +135,7 @@ learn about Ruby on Rails, and the API, which serves as a reference.  You can help improve the Rails guides by making them more coherent, consistent, or readable, adding missing information, correcting factual errors, fixing typos, or bringing them up to date with the latest edge Rails.  To do so, make changes to Rails guides source files (located [here](https://github.com/rails/rails/tree/master/guides/source) on GitHub). Then open a pull request to apply your -changes to master branch. +changes to the master branch.  When working with documentation, please take into account the [API Documentation Guidelines](api_documentation_guidelines.html) and the [Ruby on Rails Guides Guidelines](ruby_on_rails_guides_guidelines.html). diff --git a/guides/source/generators.md b/guides/source/generators.md index 89424a161b..f028d14998 100644 --- a/guides/source/generators.md +++ b/guides/source/generators.md @@ -203,8 +203,6 @@ $ rails generate scaffold User name:string        create    test/application_system_test_case.rb        create    test/system/users_test.rb        invoke  assets -      invoke    coffee -      create      app/assets/javascripts/users.coffee        invoke    scss        create      app/assets/stylesheets/users.scss        invoke  scss @@ -426,9 +424,8 @@ $ rails generate scaffold Comment body:text        create    test/application_system_test_case.rb        create    test/system/comments_test.rb        invoke  assets -      invoke    coffee -      create      app/assets/javascripts/comments.coffee        invoke    scss +      create    app/assets/stylesheets/scaffolds.scss  ```  Fallbacks allow your generators to have a single responsibility, increasing code reuse and reducing the amount of duplication. diff --git a/guides/source/getting_started.md b/guides/source/getting_started.md index 197a198db7..9eb77d2a50 100644 --- a/guides/source/getting_started.md +++ b/guides/source/getting_started.md @@ -272,8 +272,6 @@ invoke  helper  create    app/helpers/welcome_helper.rb  invoke    test_unit  invoke  assets -invoke    coffee -create      app/assets/javascripts/welcome.coffee  invoke    scss  create      app/assets/stylesheets/welcome.scss  ``` @@ -1665,7 +1663,6 @@ This creates five files and one empty directory:  | app/views/comments/                          | Views of the controller are stored here  |  | test/controllers/comments_controller_test.rb | The test for the controller              |  | app/helpers/comments_helper.rb               | A view helper file                       | -| app/assets/javascripts/comments.coffee       | CoffeeScript for the controller          |  | app/assets/stylesheets/comments.scss         | Cascading style sheet for the controller |  Like with any blog, our readers will create their comments directly after diff --git a/guides/source/testing.md b/guides/source/testing.md index de93e1c653..9de2229672 100644 --- a/guides/source/testing.md +++ b/guides/source/testing.md @@ -1028,8 +1028,8 @@ You should test for things such as:  * was the web request successful?  * was the user redirected to the right page?  * was the user successfully authenticated? -* was the correct object stored in the response template?  * was the appropriate message displayed to the user in the view? +* was the correct information displayed in the response?  The easiest way to see functional tests in action is to generate a controller using the scaffold generator: diff --git a/guides/source/upgrading_ruby_on_rails.md b/guides/source/upgrading_ruby_on_rails.md index befd4e08c0..a0553c1ccc 100644 --- a/guides/source/upgrading_ruby_on_rails.md +++ b/guides/source/upgrading_ruby_on_rails.md @@ -41,7 +41,7 @@ Rails generally stays close to the latest released Ruby version when it's releas  * Rails 3.2.x is the last branch to support Ruby 1.8.7.  * Rails 3 and above require Ruby 1.8.7 or higher. Support for all of the previous Ruby versions has been dropped officially. You should upgrade as early as possible. -TIP: Ruby 1.8.7 p248 and p249 have marshaling bugs that crash Rails. Ruby Enterprise Edition has these fixed since the release of 1.8.7-2010.02. On the 1.9 front, Ruby 1.9.1 is not usable because it outright segfaults, so if you want to use 1.9.x, jump straight to 1.9.3 for smooth sailing. +TIP: Ruby 1.8.7 p248 and p249 have marshalling bugs that crash Rails. Ruby Enterprise Edition has these fixed since the release of 1.8.7-2010.02. On the 1.9 front, Ruby 1.9.1 is not usable because it outright segfaults, so if you want to use 1.9.x, jump straight to 1.9.3 for smooth sailing.  ### The Update Task diff --git a/guides/source/working_with_javascript_in_rails.md b/guides/source/working_with_javascript_in_rails.md index 36f5039883..c36b3faa6c 100644 --- a/guides/source/working_with_javascript_in_rails.md +++ b/guides/source/working_with_javascript_in_rails.md @@ -494,10 +494,6 @@ replace the entire `<body>` of the page with the `<body>` of the response. It  will then use PushState to change the URL to the correct one, preserving  refresh semantics and giving you pretty URLs. -The only thing you have to do to enable Turbolinks is have it in your `Gemfile`, -and put `//= require turbolinks` in your JavaScript manifest, which is usually -`app/assets/javascripts/application.js`. -  If you want to disable Turbolinks for certain links, add a `data-turbolinks="false"`  attribute to the tag: | 
