おもしろ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 ぽ…