Rails
Rails 5.0.0.1を使って開発中、Rails4のころのようにroutes.rbに書いたものが思ったように動かなかったのでメモしておきます。 以下のようなroutes.rbを書いて、ただのルート(/)とadmin配下のルート(/admin/)を定義します。 Rails.application.routes.dr…
Railsなりスマホなりでアプリケーション作ったらAirbrakeとかBugsnagとかのエラーハンドリング用のサービスを使って不具合を検知できるようにするよね。 この手のサービスはやはり有料のところが多くて、個人用のアプリケーションとしてはコスト的に使いにく…
この記事はソニックガーデン Advent Calendar 2015 、6日目の記事です。 どうも大野(@xoyip)です。3日目に続いて登場させてもらいます。今日は5日目までとは少し変わって技術的なHow Toの話で、自分用の覚書でもあります。 ちなみに3日目のはこれ。 xoyip.…
Herokuのプランが変わったのでRailsアプリケーションをさくらに移行した。 ここ最近Herokuの料金体系が変わってFree Dynoは18時間までしか動かせないようになったらしい。それにともなってこんなHackをする人まで出てきているようで、Freeでとりあえず動かし…
久々に便利なの見つけた。有名だったりするのかな? radar/by_star by_starはモデルの絞り込みに使えるgemで、ActiveRecordとMongoidで使える。 ある期間内のレコードだけを表示したり集計を取ったりというときに使える。自分でも大したコードにはならないん…
先日こんなエントリーを書いた。 Grapeを使ったAPIで独自のエラーコードも一緒に返す工夫 - PILOG その後色々調べているうちに、エラーコードはレスポンスヘッダーに入れたらいいよ~という話を見かけたので、その方針を採るかどうかは別として実現方法を調…
RailsでGrapeをっていうgemを使うとちょちょいっとAPIが作れるという話は以前にも書いた。 RailsのGrapeとJbuilderでAPI開発 - PILOG Grapeを使ったAPI実装でのネストやパラメータ - PILOG このときはお試しだったんだけど、今回ちょっと本格的に書くかもと…
RailsアプリでJSでデータを書き換えたあとでHTMLを更新するってことはよくあって、そのときはだいたいidを使うと思う。そしてidにはモデル名とモデルのidをそのまま使うことが多いはず。 <li id="item-192">...</li> このようなidを書くとき今までは自分でベタ書きしてしまっていた…
app/assets/images以下に置いた画像をViewから参照するにはasset_pathを使えばいい。 app/assets/images/title.pngを参照したいのであれば = image_tag asset_path("title.png") としておけばプロダクション環境でもちゃんと参照できる(はず)。 で、このメ…
Railsのフォームで使うform_for。レイアウト調整のために各種コントロールにもclassを設定しているのに、あるフォームのドロップダウンリストにスタイルが適用されていないことに気がついた。なんだろうと思ってリファレンスを見てみると、f.selectのシグネ…
CarrierWaveというgemを使うとRailsアプリケーションに画像アップロード系の機能を割と楽に実装することができる。 アップロード先はサーバーローカルだけでなく、AmazonS3やGoogleなどのクラウド系のストレージにも対応しているし、アップロード時にリサイ…
RailsでA、Bというモデルがあるとする。モデルAはモデルBを参照しているが、参照しているモデルBはある瞬間のスナップショットにしたいとする。つまり、モデルAが欲しいのは関連を作ったときのモデルBの情報で、それ以降に変更が加わって新しくなったもので…
Railsでrender partialでいろいろなViewが使いまわしているViewがあるとき。ある1つのViewのときだけ見た目をちょっと変えるってことをやろうとしたときに、defined?を使うと便利かもなーというお話。 前提 users/A.html.haml users/B.html.haml users/C.htm…
Railsで営業日計算に(もしかしたら)使えるgem見つけた。 mdarby/weekdays 厳密に言うとこのgemは月曜〜金曜を計算しているだけで祝日に対応していないので、実運用するとなると拡張が必要そうだけど、ゼロから作るよりはマシじゃないかなと思う。 こんな使…
画像アップロード機能を提供するCarrierWaveというgemを使ったRailsアプリケーションのテストについて以前書いた。 RSpecでファイルアップロードのテスト - PILOG 今日は同じくCarrierWaveに関連して、アップロードする画像を持つようなモデルのシードデータ…
URLを入れておきたいカラムなのにRailsのマイグレーションでt.string :urlって書いてvarchar(255)にしちゃって、実際の運用で日本語URLがエンコードされて渡ってきて余裕でオーバーするっていうのはあるあるじゃないですか?それとも初心者あるある? URLに…
本番環境で動いているRailsアプリケーションのDBにおいて、問題に緊急対応するために直接ALTER_TABLEしてしまったようなとき、Railsアプリケーション側ではどんな対応をすればいいか、というお話。 レアケースかもしれないし意外とあるかもしれない。 僕は実…
Railsでbootstrap使うときはgemを使ってやっちゃうと楽なんだけど、そもそもそういうgemが多すぎてわけわからないということがある。とりあえず僕はこれを使っている。READMEが短かったから。 benjamincanac/bootstrap3-rails 使い方はREADMEにある通りappli…
これを参考にしてCarrierWaveを使った画像アップロード機能を実装してみた。 Rails 超お手軽な画像アップローダー CarrierWave の使い方 | Workabroad.jp ↑のサイトではCapybaraを使ったインテグレーションテストの書き方は載っているけど、コントローラのテ…
Rails4+Deviseの話。Deviseでユーザーを作るとデフォルトでユーザー情報更新フォームがついてくる。これはbootstrapでスタイル付けしてあるものだけど、基本はこんな感じになる。 このUserモデルに対して別のフィールドをいくつか追加した上で、同じフォーム…
Deviseを使ってユーザー認証機能を作ったときに、もうちょっとよくするための方法メモ。Deviseは普通の実装するとログイン後は/にリダイレクトされる。それを別のURLにする方法はここに書いた。 Deviseでログイン後のURLを変える方法 - PILOG では、ログイン…
Rails4でデバッグ用にPryを入れようと思ってGemfileにこんな風に書いた。 group :development do gem 'pry' gem 'pry-rails' gem 'pry-byebug' gem 'pry-stack_explorer' end これでrails consoleを起動してゴニョゴニョしているとなんだか見慣れないエラー…
Railsで使いたいgemが大体定まってくるとrails newでアプリケーションを作ってからの作業が毎回同じことの繰り返しで面倒になってくる。その上、手作業だと設定漏れが出ることも往々にしてあるため、自動化するのが望ましい。 幸いrails newコマンドには-mオ…
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タスクは大きくわけて3種類あり、普通はこの順番で定義されることになっている。 gemのタスク アプリケーション固有のタスク Railsのタスク まずソースコードを読んでみた。 Rakefile # Rakefile require File.expand_path('../config/applic…
Railsではhas_manyな関連を持つモデルに対してRESTなルートを簡単に定義することができる。 # routes.rb resources :blogs, only: [:index] resources :posts, only: [:index] end このようなルートが定義される。 % rake routes Prefix Verb URI Pattern Co…
今日から文体を常体にする。 データベースに最初からデータを入れておきたい場合、Railsではrake db:seedを使う。このタスクによりRailsアプリケーションがロードされた状態でdb/seeds.rbに書いたコードが実行される。 シード用データを作ること自体が重い場…
あとからデフォルト値を変えたり、Nullableをやめたりってときのやりかたを忘れがちなのでメモ。 class MigrationName < ActiveRecord::Migration def change change_column :models, :column_name, :integer, null:false, default:0 end end こんな感じです…
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…
RailsアプリケーションにGrapeを使って定義したエンドポイントはrake routesには表示されません。表示されるのはroutes.rbでマウントしたAPIのルートのみ。 そこで自前のrake routesを定義してGrapeのAPIもroutesに表示してあげることにしました。 参考 @kam…