ブックマーク / ruby-rails.hatenadiary.com (19)

  • いまさらながらRails4.1から導入されたEnumが便利なのでまとめてみた - Rails Webook

    las - initially (Lori Semprevio) | Flickr - Photo Sharing! Rails4.1から導入されたEnumの挙動について忘れることがあるので簡単にまとめました。 enumの定義、enumを定義したことにより使える便利なメソッドなどをまとめました。 目次 enumのスキーマ定義 enumで使えるメソッド enumの値を検索 enumの注意点 動作確認 Rails 4.2.3 Ruby 2.2.2 enumの定義 次のように、enum、属性名、属性の値(ハッシュ)で指定することでEnumを定義することができます。 class Article < ActiveRecord::Base # enumの定義(キーと数字のハッシュを渡す。数字がDBカラムに設定される) enum status: { draft: 0, published: 1 } en

    いまさらながらRails4.1から導入されたEnumが便利なのでまとめてみた - Rails Webook
    kent-where-the-light-is
    kent-where-the-light-is 2017/03/16
    “enumのキーをスコープとして使うことができます。 Article.published.where('created_at > ?', 3.days.ago) #=> SELECT "articles".* FROM "articles" WHERE "articles"."status" = ? AND (created_at > '2015-07-06 ...') [["status", 1]] # また、複数のキーを指定することもで
  • RailsでElasticsearch: 全文検索を実装 - Rails Webook

    RailsでElasticsearchを使ってレストラン検索アプリを作成、店名、住所、カテゴリなどからレストランを全文検索できるようにします。また、フィルタ(filter)も使って検索条件を指定することで、閉店している店舗も含めて検索できるようにします。 今後、Elasticsearchのページネーション・ページあたりの表示件数、ソート、ファセット・post_filter、ハイライト、サジェスト機能などをより実践的な機能を実装していきます。 目次 ElasticsearchのMacへのインストール Railsプロジェクト作成とテストデータ作成 RailsとElasticsearchで全文検索を実装 検索条件を指定する 動作確認 Mac OS X 10.11 El Capitan elasticsearch 1.7.2 Rails 4.2.3 elasticsearch-dsl 0.1.2

    RailsでElasticsearch: 全文検索を実装 - Rails Webook
    kent-where-the-light-is
    kent-where-the-light-is 2016/12/14
    “それぞれのgemが提供する機能は次のとおりです。 elasticsearch: Elasticsearch用のRubyクライアントとAPIを提供 elasticsearch-dsl: Elasticsearchのクエリを書きやすくするためのDSL(ドメイン特化言語)を提供 elasticsearch-modelとelasticsearch-rails:
  • RailsのAction Mailerでメール送信 - Rails Webook

    RailsのデフォルトのgemのAction Mailerを使いメールの送信や受信を行うことができます。 この記事では、ステップバイステップでRailsアプリケーションでメールの送信ができるようにしていきます。 目次 Railsプロジェクトの作成 メーラーの作成(メール送信) SMTPサーバの設定(Gmailで設定) 動作確認 Rails 4.1 Railsプロジェクトの作成まず、いつも通りRailsプロジェクトを作成します。 $ rails new mail_basis次に、記事(Post)のソース一式をScaffoleを使って作成します。 $ cd mail_basis $ rails g scaffold Post title:string content:textDBマイグレートをします。 $ rake db:migrateこれで、記事(Post)の一覧表示、作成、更新、削除ができ

    RailsのAction Mailerでメール送信 - Rails Webook
  • RailsのRSpecテストを速くする方法まとめ - Rails Webook

    Photo by Flickr: chief_huddleston's Photostream Railsの規模が大きくなると自動テストの実行時間もだんだんと長くなっていきます。素早く開発していくにはテストの実行時間を短くすることが大切です。 RSpecのテストを速くする方法をまとめましたので参考にしてください。 動作確認 Rails 4.1 rspec-rails 3.1.0 test-queue 0.2.9 目次 1. RSpecのパフォーマンス測定 2. test-queueで並列でテストを実行する 3. rspec-guardを使って更新したファイルを自動的にテストする 4. Springを使ってテストのロード時間を短くする 5. ログレベルを変える 6. GCを実行を抑える 7. RSpecファイルのリファクタリングをする 7.1. itを少なくする 7.2. createよりも

    RailsのRSpecテストを速くする方法まとめ - Rails Webook
  • Railsの開発効率を上げる - guard-rspec 自動でテスト(RSpec)を実行させる - Rails Webook

    Guardとは Guardとはファイルの変更を検知して、自動的にさまざまな処理を実行してくれるRubyのGemです。 これ単体で使うよりも、他のツールと連携し、自動的に処理を行うことにより開発効率を上げることができます。 メジャーどころとしては、次の3つだと思います。 guard-livereload - Viewファイルの変更したときに自動的にブラウザをリロードする guard-rspec - specファイルを変更したときに自動的にRSpecを実行する guard-rubocop - ファイルを修正したときにRuboCopを実行する 記事では、Railsへguard-rspecの導入方法を記載します。 RSpecを自動的に実行することで、ソースがいつ壊れたか簡単に検知できるようにします。 対象読者 Railsの開発効率を上げたい方 確認バージョン Mac OSX 10.9 Ruby

    Railsの開発効率を上げる - guard-rspec 自動でテスト(RSpec)を実行させる - Rails Webook
  • Railsの開発効率をあげる - Pryを使ってRailsのコンソールをパワーアップ & デバッグをする - Rails Webook

    Pryとは Rubyには、標準で付属されているirb(Interactive Ruby)というツールがあります。 consoleで、irbと入力するとirbが実行されます。 そこで、対話的にRubyの式を入力・実行することができます。 $ irb irb(main):001:0> 1 + 2 => 3 そして、Pryはirbの代替となるパワフルな対話ツールです。 なにがパワフルかというと次のようなことができます。 ドキュメントが見れる シンタックスハイライト デバッグができる(binding.pryをソース二記載するとブレイクポイントになる) $ pry [1] pry(main)> ls # 現在のスコープの変数とメソッドを表示 self.methods: inspect to_s locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_ 動作確認

    Railsの開発効率をあげる - Pryを使ってRailsのコンソールをパワーアップ & デバッグをする - Rails Webook
  • Railsでaccepts_nested_attributes_forとfields_forを使ってhas_many関連の子レコードを作成/更新するフォームを作成 - Rails Webook

    Railsでは、accepts_nested_attributes_forを使うことで簡単に1対多のモデルを一度に更新するフォームを作成することできます。 今回のケースは、ユーザー(User)が家、会社など複数の住所(Address)を持っているというという1対多関係のモデルの入れ子状態を説明します。 完成イメージは次の通りで、ユーザー情報(User)も作成しながら、住所(Address)も一緒に1フォームで作成できるようになっています。 動作確認 Rails 4.1 目次 Railsプロジェクトの作成 accepts_nested_attributes_forによる入れ子のフォームを作成 入れ子にしたモデルの削除機能の追加 親モデルと子モデルにバリデーションを追加する Ajaxで動的に住所の入力項目を追加/削除する 1. Railsプロジェクトの作成まずプロジェクトを作成します。 rai

    Railsでaccepts_nested_attributes_forとfields_forを使ってhas_many関連の子レコードを作成/更新するフォームを作成 - Rails Webook
  • Factory Girl Railsのチートシート - Rails Webook

    Railsのテストで複数のオブジェクトの作成を簡易に行えるFactoryGirl。 FactoryGirlについて基的なことを知っていることを前提に、RailsでFactoryGirlを使うよく使う機能やTipsをまとめました。 動作確認 Rails 4.1.7 Factory Girl 4.4.0 Factory Girl Rails 4.4.1 目次 1. Factory Girlのインストール 2. FactoryGirlシンタックスの省略 3. FactoryGirlの使い方あれこれ 3.1. オブジェクトのビルド、作成、スタブ作成、属性取得 3.2. 特定の値を指定してオブジェクトを作成 3.3. ブロックを渡すことで細かな処理を記載可能 3.4. 一度に複数のレコードを作成する 4. Factory定義のあれこれ 4.1. 他の属性に依存する属性を定義する 4.2. fact

    Factory Girl Railsのチートシート - Rails Webook
  • Railsでリダイレクトをするredirect_toメソッドの使い方 - Rails Webook

    Railsのコントローラーで他のURLにリダイレクトをするには、redirect_toメソッドを使います。 リダイレクト(redirect_toメソッド)とレンダー(renderメソッド)の使い分け、redirect_toメソッドの使い方について説明します。 動作確認 Rails 4.1 目次 リダイレクトとは いつリダイレクト(redirect_to())し、いつレンダー(render())をするか redirect_toメソッドの使い方 1. リダイレクトとは HTTPリダイレクトは、「サーバがブラウザからアクセスされたリクエスト(URL)を処理できないけど、できるURLを教えるからそっちへアクセスして」という挙動です。 具体的には、サーバからブラウザにレスポンスとして「リダイレクト先のURL + 永続的(ステータスコード 301)か一時的(ステータスコード 307)かを示すステータス

    Railsでリダイレクトをするredirect_toメソッドの使い方 - Rails Webook
  • N+1問題 / Eager Loading とは - Rails Webook

    N+1問題とは SQLクエリが 「データ量N + 1回 」走ってしまい、取得するデータが多くなるにつれて(Nの回数が増えるにつれて)パフォーマンスを低下させてしまう問題です。 次のように、何度もクエリが走ってしまい、その度に0.1msほどかかってしまってます。 Processing by PostsController#index as HTML Post Load (0.2ms) SELECT "posts".* FROM "posts" User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 1]] User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id",

    N+1問題 / Eager Loading とは - Rails Webook
  • Railsのタイムゾーンや時刻処理のまとめ - Rails Webook

    Rubyでは日付(yyyymmdd)を扱うためにDateクラス、時刻(yyyymmdd hh:mm:ss)を扱うためにTimeクラスが定義さています。 これらを扱いやすくするためにRailsのActiveSupportでタイムゾーンなどいくつか機能が拡張されているので、それらをまとめました。 時刻関連のテストはTimecopの使い方を参照してください。 動作確認 Rails 4.1 ActiveSupport 4.1.7 目次 ページの動作の前提条件 Rails4アプリ全体でタイムゾーンを設定 ユーザー単位でタイムゾーンを設定 タイムゾーン一覧とOSのタイムゾーンを確認 現在の日付(Date)を取得(Date.today, Date.current) 現在の時刻(Time)を取得する(Time.now) 指定した日時(Time)を作成する(Time.local) 昨日、明日を取得する(y

    Railsのタイムゾーンや時刻処理のまとめ - Rails Webook
  • RailsでCSV/Excelのダウンロード機能の実装方法 - Rails Webook

    RailsCSVExcelをダウンロード(エクスポート)する方法を説明します。 Ransackなどで検索機能をつければ、検索結果に応じたCSV/Excel出力も可能です。 動作確認 Ruby 2.1 Rails 4.1 目次 Railsプロジェクトの作成 CSVのダウンロード機能の実装 Excelのダウンロード機能の実装 Railsプロジェクトの作成 まず、Raislのプロジェクトを作成します。 rails new csv_export_test cd csv_export_testそして、必要なコントローラー、ビュー、モデルを作成します。 製造者(Manufacture)と製品(Product)が1対Nの関係にします。 rails g controller Products index rails g model Manufacture name:string rails g mod

    RailsでCSV/Excelのダウンロード機能の実装方法 - Rails Webook
  • Railsのモデルの作成、検索、更新、削除のよく使うメソッドのまとめ - Rails Webook

    Rails(Active Record)でのモデルの作成、検索、更新、削除でよく使うメソッドをまとめました。 動作確認 Rails 4.1 目次 モデルの生成と保存 モデルの検索 モデルの更新 モデルの削除 ※モデルの検証や関連については、こちらへ ※モデルの挙動がわかりづらい場合は、rails c -sで、サンドボックスモードで下記のコマンドを実行してみてください。 1. モデルの生成と保存 属性を設定してモデルオブジェクトを生成する(newメソッド) newメソッドにカラム名と値ををハッシュで渡すことで値を設定してモデルオブジェクトを生成することができる。 user = User.new(name: "田中", email: "tanaka@test.co.jp") ハッシュで値を設定する モデルオブジェクトのattributes属性にカラム名と値をハッシュで渡すことで、モデルオブジェ

    Railsのモデルの作成、検索、更新、削除のよく使うメソッドのまとめ - Rails Webook
    kent-where-the-light-is
    kent-where-the-light-is 2015/12/24
    “joinsメソッドを使うことで、INNTER JOINが行われる。”
  • Railsの開発効率をあげる - Springを使ってRailsのコンソールコマンドの実行を早くする - Rails Webook

    Springとは Springとは、Rails4.1から標準で付属するようになったアプリケーションプリローダーです。 Rails内では様々なライブラリのロードなどの前処理が行われるので、コマンドを実行するための待ち時間がかかってしまいます。 事前にバックグラウンドでライブラリをロードしておくことで、その待ち時間を短くするものがアプリケーションプリローダーです。 MiniTestやRSpecをrakeコマンドで実行したり、サーバー起動やconsoleをrailsコマンドで実行すると思いますが、動き出すまで数秒かかると思います。 開発を通すとこういったコマンドは、何十回、何百回も実行することになるので、数秒でも早いにこしたことはありません。 他の有名なアプリケーションプリローダーには、SporkやZeusといったものもあります。 Spring導入前 Springを使わないでテストを実行してみま

    Railsの開発効率をあげる - Springを使ってRailsのコンソールコマンドの実行を早くする - Rails Webook
    kent-where-the-light-is
    kent-where-the-light-is 2015/12/10
    '事前にバックグラウンドでライブラリをロードしておくことで、その待ち時間を短くするもの'
  • RailsでElasticsearch: ソート機能を実装 - Rails Webook

    前々回は「RailsでElasticsearchを使って簡単な全文検索」、 前回は、「ページネーション・1ページあたりの表示件数」を実装しました。 今回は、「ソート機能」を実装します。Elasticsearchのソート機能があるのでかなり簡単に作成できます。 目次 ソートのElasticsearchのクエリ ソート機能を実装 動作確認 Mac OS X 10.11 El Capitan elasticsearch 1.7.2 Rails 4.2.3 elasticsearch-dsl 0.1.2 elasticsearch-model 0.1.8 elasticsearch-rails 0.1.8 1. ソートのElasticsearchのクエリsortパラメータを指定することで、ソートすることができます。 ソートキーとorderにソート順の「asc(昇順)」か「desc(降順)」を指定し

    RailsでElasticsearch: ソート機能を実装 - Rails Webook
  • Rails ModelのScope(スコープ)の使い方(scopeメソッドとdefault_scopeメソッド) - Rails Webook

    モデルのスコープ機能とは、共通的に使うクエリをモデルのメソッドのように定義できる機能です。 こうすることにより、複雑なSQLを何度も書かなくてよくなり、可読性と保守性を向上させることができます。 動作確認 Rails 4.1 目次 スコープ(Scope)の概要 スコープに引数を指定 スコープのマージ デフォルトスコープの設定 1. スコープ(Scope)の概要以下の2つの方法で「共通的に使うクエリをスコープ」として定義できます。 # 定義方法1: scopeメソッドで定義 class Post < ActiveRecord::Base scope :published, -> { where(published: true) } end # 定義方法2: クラスメソッドのように定義 class Post < ActiveRecord::Base def self.published whe

    Rails ModelのScope(スコープ)の使い方(scopeメソッドとdefault_scopeメソッド) - Rails Webook
    kent-where-the-light-is
    kent-where-the-light-is 2015/11/12
    “モデルのスコープ機能とは、共通的に使うクエリをモデルのメソッドのように定義できる機能です。 こうすることにより、複雑なSQLを何度も書かなくてよくなり、可読性と保守性を向上させることができます。”
  • Railsのモデルのバリデーションエラー errors や full_messages の使い方 - Rails Webook

    Railsのモデルのバリデーションエラーの扱い方について説明します。 errors(エラーメッセージオブジェクト)、独自のエラーメッセージの追加、エラーメッセージの表示、日語化について説明します。 動作確認 Rails 4.1 目次 モデル(model)のエラーメッセージ errors の使い方 モデル(model)にエラーメッセージを追加 ビューにモデルのバリデーションエラーを表示 モデルのバリデーションエラーメッセージを日語化 モデル(model)のエラーメッセージ errors の使い方Railsのモデル(model)でバリデーションエラーが発生した場合に、model の errorsにエラーメッセージが設定されます。さらに、full_messagesでバリデーションのエラーメッセージの配列を取得できます。 次のProductモデルが設定されている前提で話を進めます。 # app

    Railsのモデルのバリデーションエラー errors や full_messages の使い方 - Rails Webook
  • Rails 4でモデルのバリデーションまとめ - Rails Webook

    Railsではバリデーション(Validation)という仕組みがあります。 フォームなどでユーザーからの入力値をDBに保存する前にその値が正しいものかモデル層で(システムとして許可している値か)を検証する仕組みです。 バリデーションの基的な流れ、バリデーションの定義とバリデーションのテスト方法、バリデーションのスキップなどのバリデーションの基についてまとめました。 動作確認 Rails 4.1 ActiveRecord 4.1 shoulda-matchers 2.6.3 目次 1. Railsでのバリデーションの流れ 2. バリデーションを定義する 2.1. 存在チェック(presence) 2.2. 一意性(ユニーク制約)のチェック(uniqueness) 2.3. 長さのチェック(length) 2.4. フォーマットのチェック(format) 2.5. 数値の値チェック(nu

    Rails 4でモデルのバリデーションまとめ - Rails Webook
    kent-where-the-light-is
    kent-where-the-light-is 2015/10/16
    条件付きバリデーションを定義する
  • Railsのmigrationの基本とレシピ集 - Rails Webook

    RailsのMigrationの基的なことから、カラム追加/削除、インデックス追加、NULL制約、カラム名変更などのレシピ集をまとめました。 動作確認 Rails 4.1 目次 1. Migrationの基礎 1.1. migrationファイルの作成 1.2. マイグレートの実施 rake db:migrateコマンド 1.3. マイグレートの適用状況確認 rake db:migrate:statusコマンド 1.4. データの投入 rake db:seedコマンド 1.5. マイグレーションで使えるデータ型一覧 2. Migrationのレシピ集 2.1. カラムの追加(add_column) 2.2. カラムの削除(remove_column) 2.3. データ型の変更(change_column) 2.4. インデックスやユニーク制約の追加/削除(add_index/remove

    Railsのmigrationの基本とレシピ集 - Rails Webook
    kent-where-the-light-is
    kent-where-the-light-is 2015/09/09
    忘れやすいのでメモ
  • 1