tkymtk's blog

Ruby on Rails及びその周辺について調べたこと。Do whatever you want to do at your own pace.

Rails 4.1.0ベータがリリースされたので主な新機能まとめ(1)

ここで紹介する機能

  • Spring アプリケーションプリローダー
  • config/secrets.yml
  • Action Pack variants
  • Action Mailer プレビュー

Spring アプリケーションプリローダー

Rails4.1では、Springがビルトインされた。
もうZeusとかSporkは出番ないのかな。
ZeusSporkとの違いは、一般的なRailsコマンドを、 binstubsを使い透過的にラップしていること。(デフォルトではrakerails
PATH./binがあるなら、自動でもっと早くなる。

config/secrets.yml

Rails4.1は、アプリケーションを作成するときに、configフォルダ内にsecrets.ymlファイルを生成する。 デフォルトでは、このファイルはアプリケーションのsecret_key_baseを含む。
それ以外にも、外部APIのためのアクセスキーといった、ほかのものも保管できる。 このファイルに追加されたものは、 Rails.application.secrets経由でアクセス可能。

例: secrets.yml

development:
  secret_key_base: 3b7cd727ee24e8444053437c36cc66c3
  some_api_key: SOMEKEY

この場合、Rails.application.secrets.some_api_key が、開発環境で SOMEKEY を返す。

Action Pack Variants

タブレットスマホ、デスクトップ別にテンプレート(html/json/xml)を描画できるようになる。 レスポンシブデザインに頼らなくて良い。

  • request.variantには:tablet,:phone,:desktopのように指定する。
  • before_action にて形態を設定する。

例:

lass ApplicationController < ActionController::Base
  before_action :detect_device_variant

  private

    def detect_device_variant
      case request.user_agent
      when /iPad/i
        request.variant = :tablet
      when /iPhone/i
        request.variant = :phone
      end
    end
end

class PostController < ApplicationController
  def show
    @post = Post.find(params[:id])

    respond_to do |format|
      format.json
      format.html               # /app/views/posts/show.html.erb をレンダー
      format.html.phone         # /app/views/posts/show.html+phone.erb をレンダー
      format.html.tablet do
        @show_edit_link = false
      end
    end
  end
end

それぞれのテンプレート

app/views/projects/show.html.erb
app/views/projects/show.html+tablet.erb
app/views/projects/show.html+phone.erb

インラインシンタックスをつかって、定義を簡略化できる。

respond_to do |format|
  format.js         { render "trash" }
  format.html.phone { redirect_to progress_path }
  format.html.none  { render "trash" }
end

Action Mailer プレビュー

  • 実際に送信することなく、emailのテンプレートを見ることが出来るようになった。
class NotifierPreview < ActionMailer::Preview
  # 次のアドレスからアクセス可:  http://localhost:3000/rails/mailers/notifier/welcome
  def welcome
    Notifier.welcome(User.first)
  end
end

リンク

広告

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

間違いがあれば、ご指摘下さると幸いです。