N+1問題を未然に防ごう -Bullet Gemの使い方-

経緯 N+1問題が発生しないようにプログラムを書いているはずだけど、どこかで起きてしまっていそうで不安。。。 ということがあって、何か判定してくれるGemないかなーと思ってたら、案の定あったので、ご紹介。 N+1問題とは そもそもN+1問題って何?って人のために。 例えば、Articleに紐づくUserというものがあったとします。Article一覧を出しつつ、著者の名前も表示したいというとき、単純... 続きを読む

RailsアプリでBowerで入れたAdminLTEの表示が動かなくなった件

経緯 新しく環境作って、RailsのアプリケーションをデプロイしてみたらAdminLTEのデザインが崩れた! AdminLTEはrails-bowerでインストールされていました。 原因 jQueryのバージョンが3になったことが影響してるみたいです。 AdminLTEのdependenciesがちゃんと指定されていないからみたい。 jquery-railsでインストールされているjQueryとr... 続きを読む

[Rails] nested_formで順番を表示する方法と上限を決める方法

経緯 親モデルと同時に子モデルを保存するときに超便利なnested_formというgemがあります。 https://github.com/ryanb/nested_form たまたま、以下のような仕様を実装する機会がありました。 自由に子の数は変えられる 最大でも5個に抑える 何番目のフィールドかを表示する その方法をば。 nested_formの使い方 [Rails] nested_attri... 続きを読む

[Rails] nested_attributesの使い方

経緯 いろいろなシステムを構築していると、グループを作成するときにメンバーも同時に作成したくなることがあります。 例えば、以下のようなモデルがあるとして、GroupのnewのときにMemberも作成することを考えてみます。 class Group < ActiveRecord::Base has_many :members end class Member < ActiveRecord... 続きを読む

[Rails] 固定の値はEnumを使おう

概要 システムを構築してると、幾つかのステータスを持つことがあります。例えば、商品についてのモデルProductのstatusとして、「発売予定」「発売中」「絶版」「再販未定」の4つのステータスを持っているとします。 これらを扱うModelの良い書き方を紹介します。 普通にやることの問題点 それぞれのステータスを10, 20, 30, 40という数値で管理しようと思います。1 そのとき単にinte... 続きを読む

[Rails] たくさんのroutingの頭に動的なパスをつける方法

経緯 マスター管理された文字列でシステムを切り分けたいことがあると思います。 例えば、Categoryモデルの名前(slugと呼ぶことにします)を用いてURLを/:slug/postsといったものにしたい時に、これだけであれば、routes.rbの設定は以下のもので十分です。 match '/:slug/posts', to: 'posts#index', via: 'get' しかし、これが多く... 続きを読む

[Rails] 管理画面と公開画面を名前空間を使ってメンテナンスしやすくする

経緯 Webアプリケーションでは往々にして管理画面と公開画面に大きく別れることが多いです。 ただ、「両方とも、productを扱うから!」と単純に全てをapp/controllers/products_controller.rbに記述してしまうと、ファイルが大きくなり、メンテナンシビリティが下がってしまいます。 そこで、今日は以下の様な設定の方法を紹介します。 管理画面は/admin/produc... 続きを読む

[Rails] 基本のRouting

基本中の基本のRouting設定の話になるのですが、改めて振り返ってみます。 基本の考え方 RailsではGET/POST/PUT/PATCH/DELETEの使用方法を明確に分けて考えます。 それぞれイメージとしてSQLと以下のように対応します。 method SQL 意味 GET SELECT データの取得 POST INSERT データの作成 PUT/PATCH UPDATE データの更新 D... 続きを読む

ArduinOSC – Arduinoの信号をOSCに変換するツール作った

経緯 ハッカソンとかで、複数人で開発を進めようとして、ハードとソフトのつなぎがある場合、 ハードウェア インターフェース ソフトウェア とおおまかに分けられると思う。 で、こういう分け方をした時は、俺がハードウェアとインターフェースを担当して、誰かがソフトウェアをやるという分け方が多い。 俺がインターフェース部分で使うのはいつもopenFrameworksだったり、Processingだったりする... 続きを読む

Turnipを使ったテストの自動化〜導入編

経緯 「あの関数」が「あれ」を正しく返すか みたいなテストもすごく大事なのですが、実際、ユーザが触るのは表の画面に表示されているものでしかなく、 「あのフォーム」に「あれ」をインプットして、「あのボタン」を押せば「あのページ」が表示される みたいなことが一番ユーザの目につくところです。しかも、そういうところで間違った処理を書いてしまうと、かなり心象がよろしくないものです。 そういう表面的な部分を楽... 続きを読む

TAG LIST

AngularJS Arduino Boids C++ Cocos2d-x CoffeeScript CSS FuelPHP Gem Grunt HTML5 Illustrator impression! JavaScript jQuery Midi MySQL Node.js OpenCV openFrameworks OpenGL osc Pd-extended PHP Processing Raspberry Pi Ruby Ruby on Rails WordPress イベント イラスト ゲーム フロントエンド ライフハック 作曲 展示会 数論 日記 映画 考え事 記事紹介 資料 電子工作 音楽