読者です 読者をやめる 読者になる 読者になる

おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

rails

find_by_sql したレコードで preload する方法

どうしても AR の query methods だけでは要求を満たせない場合の最後の手段として、find_by_sql メソッドがあります。皆さんよく使ってると思うのですが、戻り値のレコードからさらに association をロードしようとすると N+1 になるケースがあります。かと…

Rails で DB の Time 型を扱う

Rails では、DB の Time 型 を扱うことができます。これは日付を必要とせず、時間だけを格納したいときに使います。 定義方法は、他の型と同じく add_column メソッドなどで time を指定するだけです。 add_column :users, :lunch_time, :time ただ、これを…

Rails でセッションの有効期限を延長する

config/initializers/session_store.rb で次のように設定する Rails.application.config.session_store( :cookie_store, key: '_hoge_session', expire_after: 1.month ) Rails のドキュメントや railsguides で全然見つからなかったのはなぜなのだろう…。 …

最近の Rack サーバ事情について

先月、heroku の推しサーバが unicorn から puma に変わったという発表がありました。unicorn だとスロークライアントの影響を受けやすいというのが理由なようです。 もう少し詳しく調べてみましょう。 そもそもスロークライアントってなに その名の通り遅い…

pry-remote について

Pow などを利用して開発を行う際に、pry-remote は欠かせないツールです。 binding.pry_remote でブレークポイントを設定し、コンソールで pry-remote コマンドを使うと pry のようにデバッグができます。 しかし、pry-byebug の 2.0.0 になってから、pry-re…

refile というファイルアップロード用 gem がよさそう

File Uploads with Refile | GoRails を見ての感想文です。 carrierwave の作者が作った後継 gem refile がなかなかよさそうな感じです。 S3へのブラウザからの直接アップロードのサポート サムネイルの動的生成サポート アップロード時じゃなくて、ブラウザ…

railsにおけるformatの取り扱いについて

respond_to についての以下の記事を読んだ。 respond_to without all the pain - Weissblog 詳しくは原文見て欲しいけど、用意していないフォーマットにアクセスされたときにどのように振る舞うかについて書かれている。 これまで、用意していないフォーマッ…

bootstrap-sass という gem について

Rails で assets 関連のライブラリを使う際、数年前までは有志が作った gem を利用する(例: twitter-bootstrap-rails など)のが主流でした。しかしそれだと、gem の作者がボトルネックになってしまい、ライブラリのバージョンがなかなか上がらなかったりしま…

Ginza.rb 第12回を開催した

開催しました。久しぶりにコードリーディング。地味なお題のわりに人数は過去最多だったかも。パーフェクト Ruby on Railsを買いました!と言ってくれた人が多くいて嬉しかったです!! Ginza.rb 第12回 帰ってきたコードリーディング ~ Rails 4.1 Action M…

rails new のデフォルトオプションを設定しよう

みなさんは ~/.railsrc 使ってますか? rails new したときのオプションを書いておけるファイルです。Rails 3.2 から使えます。 僕は test-unit を基本的に使わないし、rails new のタイミングで bundle install が走るのが嫌なので次のように設定しています…

RSpec 3 時代の設定ファイル rails_helper.rb について

rspec-rails、3.0.1 がリリースされていますね。インストールして rails g rspec:install とすると、spec/rails_helper.rb という見慣れないファイルが作成されます。これは一体何でしょうか。 rspec-rails のREADMEを読むと、これからは spec/rails_helper.…

カウンターキャッシュの初期値を設定するときの落とし穴

後づけでカウンターキャッシュのカラムを追加する場合、初期値を設定してあげないといけませんよね。僕はマイグレーション中に次のように書きました。 class AddCommentsCountToIdeas < ActiveRecord::Migration def change add_column :ideas, :comments_co…

パーフェクト Ruby on Rails のサンプルアプリケーションを Github 上で公開しました

パーフェクトRuby on Rails 中の第6章で取り扱っている題材、イベント開催支援系のRailsアプリケーション awesome_events のソースコードを Github 上で公開しました。 ソースコードは技術評論社さんのサポートページからダウンロードすることもできますが、…

rspec-rails を 3.0.0.rc1 にアップデートする際に気をつけること

rspec-rails を 3.0.0.rc1 にアップデートすると、きっとテストがこけまくるようになるはず。そんな時は spec_helper.rb に次の設定を足してあげてください。 config.infer_spec_type_from_file_location! これまでの rspec-rails は、例えば spec/controlle…

パーフェクト Ruby on Rails という本を書きました

ここのところブログの更新頻度が下がっていたのはそういうことです。 @sugamasao、@udzura、@joker1007と共同で書きました。 パーフェクト Ruby on Railsposted with amazlet at 14.05.02すが まさお 前島 真一 近藤 宇智朗 橋立 友宏 技術評論社 売り上げラ…

Rails 4.1.0 で新しく導入された便利メソッド

Rails(ActiveSupport) は標準クラスを拡張した便利メソッド群を提供してくれています。時々これは使わないなー…という微妙なやつもありますが、僕はけっこう好きです。 Rails 4.1.0 で新しく入ったそんなメソッドをまとめます。 Numeric#in_milliseconds 数…

devise のコントローラを継承して authenticate_user! するときの注意事項

下記のようなコード。hoge アクションには authenticate_user! が効きません。 class RegistrationsController < Devise::RegistrationsController before_filter :authenticate_user!, only: :hoge def hoge; end end なぜか。authenticate_user! に該当す…

ginza.rb 第1回を開催して strong_parameters のソースコードを読んだ

7月16日(火)に ginza.rb 第1回を開催しました。 Ginza.rb 第1回 strong parameters - Ginza.rb | Doorkeeper やったこと 今回からコードリーディング開始です。最初のお題は、Rails 4 から追加された strong_parameters。Rails 4 のコアに組み込まれています…

ginza.rb 第0回を開催して Rails 4.0 のリリースノートを読んだ

先月にginza.rb 第0回を開催しました。ちょっと遅れましたがやった内容などを書きます。 やったこと Ruby on Rails 4.0 Release Notesを頭から一通りざっくり読んで、Rails 4.0 の新機能と変更点を勉強しました。 まず、4.0 での大きな追加項目なはずの Stro…

devise でログインログアウトのパスを変更したいときの注意点

例えば User モデルで devise を設定したとき、ログイン用のパスは /users/sign_in、ログアウトは /users/sign_out になります。個人的には /login /logout の方が好みなのでroutes.rb を下記のようにしました。 devise_for :users, skip: [:sessions] devis…

Cells で params や cookies を扱うテストを書く

それなりに大きめなRailsアプリを書くとき、Cells を使うと部分テンプレート単位で controller のようなものを作ることができて、controller の肥大化を防ぐことができます。たいへん便利です。 Cells に対してのテストも普通に書けますが、params や cookie…

rack-ssl で http と https を混在させようとして諦めた

表題の通りのメモ。rails で一部のパスだけ http 、他は https にしたいなーと思ってざっくり調べたのでした。 調べたこと Rails 3 では config.force_ssl = true としたら rack-ssl が使われる Rails 4 では ActionDispatch::SSL が使われる ソース見た感じ…

Devise でメールアドレス変更時にも確認メールを出す

有名なRails用認証プラグインである devise は、機能毎にモジュール化されており必要な物だけを選んで使うことができます。例えば Confirmable というモジュールを使うと会員登録時に確認メールを飛ばすことができます。ただ、デフォルトではメールアドレス…

ransack という検索用の gem について

ransack はちょう便利な検索用 gem です。パラメータの name 属性で検索条件を定義できるので、多数の検索項目があってスクラッチで検索ロジックをつくるのがしんどいギョームwebアプリなどで絶大な威力を発揮します。 ただ一つの問題はドキュメントがとても…

rake_shared_context を 0.0.2 にバージョンアップ

以前作った Rspec で rake タスクをテストする用の gem に初の pull request が来たので取り込んで 0.0.2 にバージョンアップしました。 これまで(0.0.1)は、テスト対象の rake ファイルのみを読み込む仕様にしていたため、テスト対象外のファイルに定義され…

Rails 4.0 と bundler install --binstubs について

Rails 4.0.beta1 でアプリ作ってみようとして、途中で bundle install --binstubs としたら、なぜか rails generate などのコマンドが効かなくなってしまいました。、これは、Rails 4.0 が生成する bin/rails を bundler がオーバライドしてしまったことが原…

rinari を起動させないメジャーモードを設定する

最近の rinari では rinari の起動条件が変わったらしく、magit のコミットログを書いているときにも rinari-mode が効いていて、キーバインドをそちらに取られてコミットできず、いちいち手動で rinari をオフにしないといけなくて大変辛い思いをしていまし…

RailsCasts Pro の podcast を登録してスキマ時間に視聴する

RailsCasts とは RailsCasts は超有名なので知っている人も多いと思いますが、念のため以前書いた紹介文を再掲します。 毎週2つ(うち1つは有料購読が必要)の Rails 関連動画をアップロードしてくれているサイトです。良質な情報を定期的に届けてくれるすばら…

pry-rails が追加してくれるコマンド3つ

pry-rails は、登場した頃は単純にrails consoleしたときに pry が使えるだけの gem だったはずなのですが、今日 README をみてみたら独自のコマンドが定義されていました。 show-routes rake routesと同じ結果が返ってきます。rails のロードが終わってるの…

Rails 4.0 で新しく追加される予定の find_or_create_by メソッドについて

EdgeRails.info見てたら気になったので調べました。 最近 rails の master に、 rails 3.x 系でよく使っていた first_or_create と似たメソッド find_or_create_by が追加されました。そして first_or_create の方はメソッドの説明が削除され、depricated ぽ…

Rails4.0に含まれる strong_parameters について

注意 このエントリは急いで書いたので間違いが含まれている可能性が高いです。気づいた方はご指摘ください。 序文 strong_parameters とは、mass assignment で余計なパラメータをモデルの属性にセットさせないための新しい仕組みです。Rails 4.0 からはこれ…

エラー通知用ウェブサービス airbrake のメモ

エラー通知用のウェブサービス Airbrake の ruby 用プラグイン airbrake の README を一部和訳したメモを発掘したので載せておきます。 airbrake は exception_notification とは違い同種のエラーであれば複数回発生しても通知は一回だけ送られるのと、web上…

Object#in?(*args)

#385 Authorization from Scratch Part 1 (pro) - RailsCasts を見ていて気づいたのでメモ。 Ruby on Rails Documentation に書いてあったコード例をみると分かるけど、include? の逆パターンですね。基本的には include? 使えばいいと思いますが、場合によ…

Hash#slice

strong_parameters のソース読んでたら Hash#slice が使われていることに気づいて、「あれ、こんなメソッドあったっけ?」となり調べてみました。どうやら Rails(ActiveSupport) で hash を拡張しているようです。 引数の key だけを含む hash を返します。…

僕が参考にしている Ruby, Rails の情報源まとめ(海外ブログ編)

昨日 @bekkou68 さんに「前島さんってどうやってRubyやRails関連の情報を収集しているんですか?」って聞かれたのでまとめてみます。とりあえず海外のブログ限定で。日本ブログ編は気が向いたらやります…。 RailsCasts 有名すぎて説明不要かもしれませんね。…

Rails 4.0 に入る予定の turbolinks について調べた

Rails 4.0 のデフォルト Gemfile に入るらしい、pjax っぽいことをして画面遷移を高速化する gem turbolinks について軽く調べてみました。 Introducing Turbolinks: github.com/rails/turbolin…. This will ship as default-on in Rails 4.0 Gemfile. PRESS…

rails generate controller で無駄な helper や assets を生成しない方法

rails generate controller で controller を生成すると、必要の無い helper、 coffee、stylesheet ファイルが一緒に生成されるので後で消すのがめんどくさいですね。そんなときは下記のように –no-helper オプションや –no-assets オプションを付けることで…

Rails 4.0 は rake routes いらず

Rails 4.0 では、development 環境で http://example.com/rails/info/routes にアクセスすると、ルーティング情報が下記のように確認できるようになりました。4.0から rake routes でルーティングを確認する機会はかなり減りそうです。 これは sextant とい…

edge な rails の試しかた

Rails4.0 を試したいなーと思ったのですが、インストールの仕方を 以前やったことがある にもかかわらず忘れてました><。 cd ~/work/github/ git clone git://github.com/rails/rails.git ~/work/github/rails/bin/rails new yourapp --edge 上記のように…

ActiveRecord::QueryMethods#joins のメモ

Ruby on Rails Guides: Active Record Query Interface の joins の章を見てメモったので載せておきます。 11 Joining Tables joins メソッドについて。 11.1 Using a String SQL Fragment 単純に JOIN 節の生 SQL を引数として書ける Client.joins('LEFT OU…

Fabrication 2.0 アップグレードガイド

いつの間にか Fabrication がバージョン2になっていて、そこで非互換な変更がされたようです。バージョン1からの移行の仕方が書かれた Fabrication 2.0 Upgrade Guide - The Hashrocket Blog を意訳したので載せときます。 全ての末尾の”!”を削除 ”!” は dep…

ローカルgemのrdocみるなら gem server より yard server --gems

復習用エントリ。そもそもローカルのgemのrdoc見る機会も少なくなってるというのもあり完全に忘れてた。gem server よりも yard server --gems で出力する rdoc の方が見やすいですね。 参考 Route 477 - ローカルのgemのドキュメントを見る簡単な方法(2010…

sprockets の README 意訳

Rails3.1 から同梱されるようになった sprockets の README の意訳です。 sstephenson/sprockets - GitHub はじめに Sprockets は assets ファイルのコンパイルと配信を行うための Ruby のライブラリです。JavaScript と CSS ファイルの依存関係を宣言でき、…

capybara-webkitのインストールに失敗

JavaScript を使ったエンドツーエンドテストには capybara の selenium ドライバを使っています。JavaScript のテストが出来るのは大変便利なのですが、selenium を使うと firefox が立ち上がってガチャガチャとやるので遅いです。あとはテスト用のサーバを…

Powで一時的にproduction環境にする

Pow は development 用!という先入観があったけど、#{Rails.root}/.powenv に export RAILS_ENV=productionとかしておけば、Pow で production を試すことが出来ることに気づいた。

Rails Application Template を使ってみる

最近 rails new コマンドを使って rails アプリを生成することが多いです。作るたびに .gitignore に /vendor/bundle を追加するなどいつも同じ事をしていたので、テンプレートを使って共通化することにしました。ファイルをGistにアップして下記のように使…

capybara で確認ダイアログを含む js をテストする

capybara 経由で selenium を使ってテストする時に、確認ダイアログを含む js をテストする方法のまとめ。 昔のやり方 クリックする前に、confirm の内容を差し替える方法。 page.evaluate_script('window.confirm = function() { return true; }') page.cli…

capistrano で rails アプリをデプロイ

遅まきながら capistrano デビューをしようと思い立ちました。ググった感じでは断片的な情報しかひっかからなかったので、それらをまとめて全体的な情報を網羅した内容をブログに書こうと思ったのですが、Railsデプロイの capistrano の章がよくまとまってい…

scss-modeを導入

結構前のメモを発掘したので一応載せときます。Rails 3.1 から SCSS が標準になったので、scss-mode を導入してみました。antonj/scss-mode - GitHub自動で SCSS を CSS にコンパイルしてくれる機能がありますが、Rails 3.1 で使うだけなら自動コンパイル必…

production 環境で bundle install

テスト用、開発用の gem を除いて gem をインストールしたい場合、--without でいらないグループを指定するといい bundle install --without test development