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

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

[Rails]confirmでOKしたときだけJSを動作させる方法

経緯 Railsではlink_toヘルパーにdata: {confirm: 'よろしいですか?'}のように書くと、リンクをクリックしたときに確認のアラートが出るようにできます。 ただ、いつもどこでも、ajaxを飛ばすなど、リンク先に遷移するわけではありません。 そういうときに、confirmでOKされたときにだけ実行するJSの書き方。ここではCoffeeScriptを利用します。 やり方 やり方は... 続きを読む

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... 続きを読む

Ruby on RailsでTwitterみたいに時刻を○○前みたい表示する方法

Twitterをよく見ると、ツイートした時間の表示は○○前とか約○○時間前みたいなかなりアバウトな時間表示になっています。Ruby on Railsではago_ago_in_wordsメソッドを使うことで簡単に実装することができます。ここではその使い方について。 ヘルパーに追加 Viewでこの関数を使うときに、直接、Viewに書いてしまうのは、見た目とロジックの分離という視点で、MVCの考え方の上... 続きを読む

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 イベント イラスト ゲーム フロントエンド ライフハック 作曲 展示会 数論 日記 映画 考え事 記事紹介 資料 電子工作 音楽