mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #40922 from jonathanhefner/guides-split-code-snippets
Split code snippets by context [ci-skip]
This commit is contained in:
commit
c008a36492
16 changed files with 95 additions and 12 deletions
|
@ -396,15 +396,17 @@ Please refer to the [Changelog][railties] for detailed changes.
|
|||
* Introduced `Rails::Application.config_for` to load a configuration for the
|
||||
current environment.
|
||||
|
||||
```ruby
|
||||
# config/exception_notification.yml:
|
||||
```yaml
|
||||
# config/exception_notification.yml
|
||||
production:
|
||||
url: http://127.0.0.1:8080
|
||||
namespace: my_app_production
|
||||
development:
|
||||
url: http://localhost:3001
|
||||
namespace: my_app_development
|
||||
```
|
||||
|
||||
```ruby
|
||||
# config/environments/production.rb
|
||||
Rails.application.configure do
|
||||
config.middleware.use ExceptionNotifier, config_for(:exception_notification)
|
||||
|
|
|
@ -96,17 +96,20 @@ Some things that you can achieve with this:
|
|||
- Attributes do not need to be backed by a database column.
|
||||
|
||||
```ruby
|
||||
|
||||
# db/schema.rb
|
||||
create_table :store_listings, force: true do |t|
|
||||
t.decimal :price_in_cents
|
||||
t.string :my_string, default: "original default"
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/store_listing.rb
|
||||
class StoreListing < ActiveRecord::Base
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
store_listing = StoreListing.new(price_in_cents: '10.1')
|
||||
|
||||
# before
|
||||
|
|
|
@ -113,7 +113,9 @@ class InvitationsMailer < ApplicationMailer
|
|||
mail subject: "#{@inviter.name} invited you to their Basecamp (#{@account.name})"
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
InvitationsMailer.with(inviter: person_a, invitee: person_b)
|
||||
.account_invitation.deliver_later
|
||||
```
|
||||
|
|
|
@ -188,7 +188,9 @@ Then you would create your own channel classes. For example, you could have a
|
|||
# app/channels/chat_channel.rb
|
||||
class ChatChannel < ApplicationCable::Channel
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/channels/appearance_channel.rb
|
||||
class AppearanceChannel < ApplicationCable::Channel
|
||||
end
|
||||
|
|
|
@ -64,7 +64,9 @@ class ApplicationMailer < ActionMailer::Base
|
|||
default from: "from@example.com"
|
||||
layout 'mailer'
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/mailers/user_mailer.rb
|
||||
class UserMailer < ApplicationMailer
|
||||
end
|
||||
|
@ -723,7 +725,7 @@ end
|
|||
|
||||
* You could use an `after_action` to do similar setup as a `before_action` but
|
||||
using instance variables set in your mailer action.
|
||||
|
||||
|
||||
* Using an `after_action` callback also enables you to override delivery method
|
||||
settings by updating `mail.delivery_method.settings`.
|
||||
|
||||
|
|
|
@ -196,7 +196,9 @@ module YourApp
|
|||
config.active_job.queue_name_prefix = Rails.env
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/jobs/guests_cleanup_job.rb
|
||||
class GuestsCleanupJob < ApplicationJob
|
||||
queue_as :low_priority
|
||||
|
@ -232,7 +234,9 @@ module YourApp
|
|||
config.active_job.queue_name_delimiter = '.'
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/jobs/guests_cleanup_job.rb
|
||||
class GuestsCleanupJob < ApplicationJob
|
||||
queue_as :low_priority
|
||||
|
@ -270,7 +274,9 @@ class ProcessVideoJob < ApplicationJob
|
|||
# Do process video
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
ProcessVideoJob.perform_later(Video.last)
|
||||
```
|
||||
|
||||
|
|
|
@ -37,11 +37,15 @@ that are supported by the PostgreSQL adapter.
|
|||
create_table :documents do |t|
|
||||
t.binary 'payload'
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/document.rb
|
||||
class Document < ApplicationRecord
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# Usage
|
||||
data = File.read(Rails.root + "tmp/output.pdf")
|
||||
Document.create payload: data
|
||||
|
@ -61,11 +65,15 @@ create_table :books do |t|
|
|||
end
|
||||
add_index :books, :tags, using: 'gin'
|
||||
add_index :books, :ratings, using: 'gin'
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/book.rb
|
||||
class Book < ApplicationRecord
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# Usage
|
||||
Book.create title: "Brave New World",
|
||||
tags: ["fantasy", "fiction"],
|
||||
|
@ -348,12 +356,16 @@ create_table :comments, id: :uuid do |t|
|
|||
# t.belongs_to :post, type: :uuid
|
||||
t.references :post, type: :uuid
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/post.rb
|
||||
class Post < ApplicationRecord
|
||||
has_many :comments
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/comment.rb
|
||||
class Comment < ApplicationRecord
|
||||
belongs_to :post
|
||||
|
@ -502,11 +514,15 @@ create_table :documents do |t|
|
|||
end
|
||||
|
||||
add_index :documents, "to_tsvector('english', title || ' ' || body)", using: :gin, name: 'documents_idx'
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/document.rb
|
||||
class Document < ApplicationRecord
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# Usage
|
||||
Document.create(title: "Cats and Dogs", body: "are nice!")
|
||||
|
||||
|
|
|
@ -290,11 +290,15 @@ require "sti_preload"
|
|||
class Shape < ApplicationRecord
|
||||
include StiPreload # Only in the root class.
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/polygon.rb
|
||||
class Polygon < Shape
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/triangle.rb
|
||||
class Triangle < Polygon
|
||||
end
|
||||
|
|
|
@ -909,7 +909,9 @@ module Blog
|
|||
"blog_"
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/blog/post.rb
|
||||
module Blog
|
||||
class Post < ApplicationRecord
|
||||
|
@ -949,11 +951,15 @@ these classes:
|
|||
# app/models/polygon.rb
|
||||
class Polygon < ApplicationRecord
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/triangle.rb
|
||||
class Triangle < Polygon
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/rectangle.rb
|
||||
class Rectangle < Polygon
|
||||
end
|
||||
|
@ -1157,7 +1163,9 @@ module BellX1
|
|||
class FlightModel < FlightModel
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/bell_x1/aircraft.rb
|
||||
module BellX1
|
||||
class Aircraft
|
||||
|
@ -1211,11 +1219,15 @@ Given
|
|||
# app/models/hotel.rb
|
||||
class Hotel
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/image.rb
|
||||
class Image
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/hotel/image.rb
|
||||
class Hotel
|
||||
class Image < Image
|
||||
|
@ -1267,7 +1279,9 @@ module Hotel
|
|||
class Services
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# app/models/hotel/geo_location.rb
|
||||
module Hotel
|
||||
class GeoLocation
|
||||
|
|
|
@ -1697,7 +1697,7 @@ These configuration points are then available through the configuration object:
|
|||
You can also use `Rails::Application.config_for` to load whole configuration files:
|
||||
|
||||
```yaml
|
||||
# config/payment.yml:
|
||||
# config/payment.yml
|
||||
production:
|
||||
environment: production
|
||||
merchant_id: production_merchant_id
|
||||
|
@ -1709,7 +1709,9 @@ You can also use `Rails::Application.config_for` to load whole configuration fil
|
|||
merchant_id: development_merchant_id
|
||||
public_key: development_public_key
|
||||
private_key: development_private_key
|
||||
```
|
||||
|
||||
```ruby
|
||||
# config/application.rb
|
||||
module MyApp
|
||||
class Application < Rails::Application
|
||||
|
|
|
@ -404,7 +404,9 @@ Add the missing translations into the translation dictionary files:
|
|||
en:
|
||||
hello_world: Hello world!
|
||||
hello_flash: Hello flash!
|
||||
```
|
||||
|
||||
```yaml
|
||||
# config/locales/pirate.yml
|
||||
pirate:
|
||||
hello_world: Ahoy World
|
||||
|
@ -472,7 +474,9 @@ provides a `number_to_currency` helper to handle the following case.
|
|||
# config/locales/en.yml
|
||||
en:
|
||||
currency: "$"
|
||||
```
|
||||
|
||||
```yaml
|
||||
# config/locales/es.yml
|
||||
es:
|
||||
currency: "€"
|
||||
|
@ -496,7 +500,9 @@ Proper abstraction is shown in the following example:
|
|||
# config/locales/en.yml
|
||||
en:
|
||||
product_price: "$%{price}"
|
||||
```
|
||||
|
||||
```yaml
|
||||
# config/locales/es.yml
|
||||
es:
|
||||
product_price: "%{price} €"
|
||||
|
|
|
@ -590,15 +590,19 @@ In this application:
|
|||
Similar to the Layout Inheritance logic, if a template or partial is not found in the conventional path, the controller will look for a template or partial to render in its inheritance chain. For example:
|
||||
|
||||
```ruby
|
||||
# in app/controllers/application_controller
|
||||
# app/controllers/application_controller.rb
|
||||
class ApplicationController < ActionController::Base
|
||||
end
|
||||
```
|
||||
|
||||
# in app/controllers/admin_controller
|
||||
```ruby
|
||||
# app/controllers/admin_controller.rb
|
||||
class AdminController < ApplicationController
|
||||
end
|
||||
```
|
||||
|
||||
# in app/controllers/admin/products_controller
|
||||
```ruby
|
||||
# app/controllers/admin/products_controller.rb
|
||||
class Admin::ProductsController < AdminController
|
||||
def index
|
||||
end
|
||||
|
|
|
@ -261,7 +261,9 @@ like yaffles.
|
|||
class Hickwall < ApplicationRecord
|
||||
acts_as_yaffle
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# test/dummy/app/models/wickwall.rb
|
||||
|
||||
class Wickwall < ApplicationRecord
|
||||
|
@ -284,7 +286,9 @@ module Yaffle
|
|||
end
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# test/dummy/app/models/application_record.rb
|
||||
|
||||
class ApplicationRecord < ActiveRecord::Base
|
||||
|
@ -340,7 +344,9 @@ module Yaffle
|
|||
end
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# test/dummy/app/models/application_record.rb
|
||||
|
||||
class ApplicationRecord < ActiveRecord::Base
|
||||
|
@ -413,7 +419,9 @@ module Yaffle
|
|||
end
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# test/dummy/app/models/application_record.rb
|
||||
|
||||
class ApplicationRecord < ActiveRecord::Base
|
||||
|
|
|
@ -1226,7 +1226,9 @@ class Video < ApplicationRecord
|
|||
identifier
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
video = Video.find_by(identifier: "Roman-Holiday")
|
||||
edit_video_path(video) # => "/videos/Roman-Holiday/edit"
|
||||
```
|
||||
|
@ -1247,7 +1249,9 @@ Rails.application.routes.draw do
|
|||
|
||||
draw(:admin) # Will load another route file located in `config/routes/admin.rb`
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# config/routes/admin.rb
|
||||
|
||||
namespace :admin do
|
||||
|
|
|
@ -634,11 +634,13 @@ define a reference node between two different fixtures. Here's an example with
|
|||
a `belongs_to`/`has_many` association:
|
||||
|
||||
```yaml
|
||||
# In fixtures/categories.yml
|
||||
# fixtures/categories.yml
|
||||
about:
|
||||
name: About
|
||||
```
|
||||
|
||||
# In fixtures/articles.yml
|
||||
```yaml
|
||||
# fixtures/articles.yml
|
||||
first:
|
||||
title: Welcome to Rails!
|
||||
body: Hello world!
|
||||
|
@ -1884,7 +1886,9 @@ class ChatRelayJob < ApplicationJob
|
|||
ChatChannel.broadcast_to room, text: message
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# test/jobs/chat_relay_job_test.rb
|
||||
require "test_helper"
|
||||
|
||||
|
|
|
@ -1176,7 +1176,9 @@ class Notifier < ActionMailer::Base
|
|||
mail(to: user.email, ...)
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
mail = Notifier.notify(user, ...) # Notifier#notify is not yet called at this point
|
||||
mail = mail.deliver_now # Prints "Called"
|
||||
```
|
||||
|
@ -1701,7 +1703,7 @@ such format is [JSON Patch](https://tools.ietf.org/html/rfc6902). While Rails
|
|||
does not support JSON Patch natively, it's easy enough to add support:
|
||||
|
||||
```ruby
|
||||
# in your controller
|
||||
# in your controller:
|
||||
def update
|
||||
respond_to do |format|
|
||||
format.json do
|
||||
|
@ -1714,8 +1716,10 @@ def update
|
|||
end
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
# In config/initializers/json_patch.rb:
|
||||
```ruby
|
||||
# config/initializers/json_patch.rb
|
||||
Mime::Type.register 'application/json-patch+json', :json_patch
|
||||
```
|
||||
|
||||
|
|
Loading…
Reference in a new issue