ぴよログ

↓に移転したのでこっちは更新されません、多分。

Rails

Rails5でnamespace以下のxxx_root_pathヘルパーが定義されなかったので回避した

Rails 5.0.0.1を使って開発中、Rails4のころのようにroutes.rbに書いたものが思ったように動かなかったのでメモしておきます。 以下のようなroutes.rbを書いて、ただのルート(/)とadmin配下のルート(/admin/)を定義します。 Rails.application.routes.dr…

Railsなどで無料から使えるエラー通知サービス Rollbar

Railsなりスマホなりでアプリケーション作ったらAirbrakeとかBugsnagとかのエラーハンドリング用のサービスを使って不具合を検知できるようにするよね。 この手のサービスはやはり有料のところが多くて、個人用のアプリケーションとしてはコスト的に使いにく…

RailsアプリにiOSクライアントをサッと作る #sgadvent

この記事はソニックガーデン Advent Calendar 2015 、6日目の記事です。 どうも大野(@xoyip)です。3日目に続いて登場させてもらいます。今日は5日目までとは少し変わって技術的なHow Toの話で、自分用の覚書でもあります。 ちなみに3日目のはこれ。 xoyip.…

RailsアプリをHeroku→さくらVPSに移行

Herokuのプランが変わったのでRailsアプリケーションをさくらに移行した。 ここ最近Herokuの料金体系が変わってFree Dynoは18時間までしか動かせないようになったらしい。それにともなってこんなHackをする人まで出てきているようで、Freeでとりあえず動かし…

ActiveRecordの日付カラムでレコードを絞り込める by_star gem

久々に便利なの見つけた。有名だったりするのかな? radar/by_star by_starはモデルの絞り込みに使えるgemで、ActiveRecordとMongoidで使える。 ある期間内のレコードだけを表示したり集計を取ったりというときに使える。自分でも大したコードにはならないん…

Grapeで独自のレスポンスヘッダーを追加する

先日こんなエントリーを書いた。 Grapeを使ったAPIで独自のエラーコードも一緒に返す工夫 - PILOG その後色々調べているうちに、エラーコードはレスポンスヘッダーに入れたらいいよ~という話を見かけたので、その方針を採るかどうかは別として実現方法を調…

Grapeを使ったAPIで独自のエラーコードも一緒に返す工夫

RailsでGrapeをっていうgemを使うとちょちょいっとAPIが作れるという話は以前にも書いた。 RailsのGrapeとJbuilderでAPI開発 - PILOG Grapeを使ったAPI実装でのネストやパラメータ - PILOG このときはお試しだったんだけど、今回ちょっと本格的に書くかもと…

ActionViewのdom_id便利そう

RailsアプリでJSでデータを書き換えたあとでHTMLを更新するってことはよくあって、そのときはだいたいidを使うと思う。そしてidにはモデル名とモデルのidをそのまま使うことが多いはず。 <li id="item-192">...</li> このようなidを書くとき今までは自分でベタ書きしてしまっていた…

Railsでapp/assets/images以下に置いた画像のパスをモデルで参照する

app/assets/images以下に置いた画像をViewから参照するにはasset_pathを使えばいい。 app/assets/images/title.pngを参照したいのであれば = image_tag asset_path("title.png") としておけばプロダクション環境でもちゃんと参照できる(はず)。 で、このメ…

form_forのf.selectのhtml_options

Railsのフォームで使うform_for。レイアウト調整のために各種コントロールにもclassを設定しているのに、あるフォームのドロップダウンリストにスタイルが適用されていないことに気がついた。なんだろうと思ってリファレンスを見てみると、f.selectのシグネ…

CarrierWaveでアップロードした画像のファイル名を日時にすると困る

CarrierWaveというgemを使うとRailsアプリケーションに画像アップロード系の機能を割と楽に実装することができる。 アップロード先はサーバーローカルだけでなく、AmazonS3やGoogleなどのクラウド系のストレージにも対応しているし、アップロード時にリサイ…

Railsである時点でのモデルのスナップショットのためにpaper_trailでのバージョニングを行う

RailsでA、Bというモデルがあるとする。モデルAはモデルBを参照しているが、参照しているモデルBはある瞬間のスナップショットにしたいとする。つまり、モデルAが欲しいのは関連を作ったときのモデルBの情報で、それ以降に変更が加わって新しくなったもので…

Railsのrenderでdefined?による分岐

Railsでrender partialでいろいろなViewが使いまわしているViewがあるとき。ある1つのViewのときだけ見た目をちょっと変えるってことをやろうとしたときに、defined?を使うと便利かもなーというお話。 前提 users/A.html.haml users/B.html.haml users/C.htm…

平日の計算にweekdays gemがちょっと便利

Railsで営業日計算に(もしかしたら)使えるgem見つけた。 mdarby/weekdays 厳密に言うとこのgemは月曜〜金曜を計算しているだけで祝日に対応していないので、実運用するとなると拡張が必要そうだけど、ゼロから作るよりはマシじゃないかなと思う。 こんな使…

CarrierWave使用モデルのシードデータを用意する

画像アップロード機能を提供するCarrierWaveというgemを使ったRailsアプリケーションのテストについて以前書いた。 RSpecでファイルアップロードのテスト - PILOG 今日は同じくCarrierWaveに関連して、アップロードする画像を持つようなモデルのシードデータ…

t.string :urlってやっちゃう #あるある

URLを入れておきたいカラムなのにRailsのマイグレーションでt.string :urlって書いてvarchar(255)にしちゃって、実際の運用で日本語URLがエンコードされて渡ってきて余裕でオーバーするっていうのはあるあるじゃないですか?それとも初心者あるある? URLに…

Railsでマイグレーションを介さずにサーバーでDBを変更してしまったとき

本番環境で動いているRailsアプリケーションのDBにおいて、問題に緊急対応するために直接ALTER_TABLEしてしまったようなとき、Railsアプリケーション側ではどんな対応をすればいいか、というお話。 レアケースかもしれないし意外とあるかもしれない。 僕は実…

Railsでbootstrap3のgem入れてアイコンフォントが使えないとき

Railsでbootstrap使うときはgemを使ってやっちゃうと楽なんだけど、そもそもそういうgemが多すぎてわけわからないということがある。とりあえず僕はこれを使っている。READMEが短かったから。 benjamincanac/bootstrap3-rails 使い方はREADMEにある通りappli…

RSpecでファイルアップロードのテスト

これを参考にしてCarrierWaveを使った画像アップロード機能を実装してみた。 Rails 超お手軽な画像アップローダー CarrierWave の使い方 | Workabroad.jp ↑のサイトではCapybaraを使ったインテグレーションテストの書き方は載っているけど、コントローラのテ…

Deviseで生成したユーザーの更新フォームに自前のフィールドを追加する

Rails4+Deviseの話。Deviseでユーザーを作るとデフォルトでユーザー情報更新フォームがついてくる。これはbootstrapでスタイル付けしてあるものだけど、基本はこんな感じになる。 このUserモデルに対して別のフィールドをいくつか追加した上で、同じフォーム…

RailsでDeviseを使ったときのログイン周りの画面遷移

Deviseを使ってユーザー認証機能を作ったときに、もうちょっとよくするための方法メモ。Deviseは普通の実装するとログイン後は/にリダイレクトされる。それを別のURLにする方法はここに書いた。 Deviseでログイン後のURLを変える方法 - PILOG では、ログイン…

Pry 0.10.0でundefined method `pager&#39;

Rails4でデバッグ用にPryを入れようと思ってGemfileにこんな風に書いた。 group :development do gem 'pry' gem 'pry-rails' gem 'pry-byebug' gem 'pry-stack_explorer' end これでrails consoleを起動してゴニョゴニョしているとなんだか見慣れないエラー…

rails-composerとrails newの-mオプション

Railsで使いたいgemが大体定まってくるとrails newでアプリケーションを作ってからの作業が毎回同じことの繰り返しで面倒になってくる。その上、手作業だと設定漏れが出ることも往々にしてあるため、自動化するのが望ましい。 幸いrails newコマンドには-mオ…

PostgresSQL+ActiveRecordのwhereで大文字小文字を無視

SQLのlower Model.where("lower(name) like ?", "%john%").to_sql # SELECT \"models\".* FROM \"models\" WHERE (lower(name) like '%john%') SQLのILIKE PosgreSQLではILIKEが使える。 Model.where("name ilike ?", "%john%").to_sql # SELECT \"models\".…

RailsのRakeタスクが定義される順番

Railsで使うRakeタスクは大きくわけて3種類あり、普通はこの順番で定義されることになっている。 gemのタスク アプリケーション固有のタスク Railsのタスク まずソースコードを読んでみた。 Rakefile # Rakefile require File.expand_path('../config/applic…

routes.rbでresourcesを使ったときのパラメータをid以外にする

Railsではhas_manyな関連を持つモデルに対してRESTなルートを簡単に定義することができる。 # routes.rb resources :blogs, only: [:index] resources :posts, only: [:index] end このようなルートが定義される。 % rake routes Prefix Verb URI Pattern Co…

Rails x PostgreSQL db:seed用sqlを作る

今日から文体を常体にする。 データベースに最初からデータを入れておきたい場合、Railsではrake db:seedを使う。このタスクによりRailsアプリケーションがロードされた状態でdb/seeds.rbに書いたコードが実行される。 シード用データを作ること自体が重い場…

RailsのDBマイグレーションでカラムを変更する

あとからデフォルト値を変えたり、Nullableをやめたりってときのやりかたを忘れがちなのでメモ。 class MigrationName < ActiveRecord::Migration def change change_column :models, :column_name, :integer, null:false, default:0 end end こんな感じです…

Grapeを使ったAPI実装でのネストやパラメータ

Grapeをもう少し使ってみました。関連記事は↓ RailsのGrapeとJbuilderでAPI開発 - PILOG 基本形 # app/api/api.rb resource :items do get '/', jbuilder:'items' do @items = Item.all end end パラメータを受け取る 全てのItemではなく、idに該当するItem…

GrapeのAPIのエンドポイントをrake routes的に出力する

RailsアプリケーションにGrapeを使って定義したエンドポイントはrake routesには表示されません。表示されるのはroutes.rbでマウントしたAPIのルートのみ。 そこで自前のrake routesを定義してGrapeのAPIもroutesに表示してあげることにしました。 参考 @kam…