kame's engineer note

技術関連のメモをブログに記録していく

Ruby

rails 4でransackを使った検索機能を実装した

すごく簡単に検索機能を実装できるというransack。 metasearchというGemの後継らしい。 ちょうど検索を実装する案件があったので、試しに使ってみた。 流れ ransack導入 searchメソッド(DSL)の実装 ransackable_scopesで柔軟な検索実装 前提 Authorモデルの…

Rails ajaxでhogehoge.js.slim(erb)を使わずにHTMLを書き換える

概要 前回の記事では、ajaxを実現するためのファイル構成は以下のようになっていた。 - controllers - photo_controller.rb - views - photo - new.html.slim - new.js.slim - _add_photo_form.html.slim 例えばviews内にjsファイルを配置するのではなく、な…

sinatra+bower+gulpでWEBアプリのスケルトンを作る

概要 簡単なWEBアプリを作りたい時にsinatraをよく使っている。 素のままでも便利なのだが、開発効率をもっと向上させるために、色々とカスタマイズした状態のスケルトンを作ることにした。 具体的に言うと下記のようなことをしたい。 slim,sass,coffeeの自…

rails4.2でAuthlogicを使ってみた

railsでユーザー登録機能をつける際は勝手に色々とユーザー登録周りの機能を付けてくれるDeviseを普段よく使ってる。 しかし、少しレールから外れたことをしようとすると、Deviseのソースをoverrideしたり、直接さわらないといけなかったりと結構面倒くさい…

seedについてまとめてみる

seeds関連ファイルの階層化 初期の状態だとdb/seeds.rbだけを読み込んで実行するいという流れだが、テーブル数や登録するレコード数が多かったりすることで行数が長くなり、管理がしにくくなってしまう。 そのため、下記のようにRailsの環境で階層化し、その…

rails4系 deviseで論理削除を実装する

やりたいこと Deviseにはデフォルトでユーザーの削除機能がついているが、論理削除機能は残念ながらついていない。 userテーブルが多くのリレーション関係を持っている場合は、物理削除だと色々とややこしくなるので、Deviseを使った状態で論理削除を実装で…

rails4系のdeviseにカスタムフィールドを追加する

やりたいこと deviseのモデルにusername等、カスタムフィールドを追加したい場合がる。 rails3系では単純にカラムを追加し、attr_accessibleでアクセスできるようにすればよかったが、rails4系からはattr_accessibleは非推奨になっていて、その代わりにcontr…

rails4.2でエンコードエラー rails incompatible character encodings: ASCII-8BIT and UTF-8

rails4.2で簡単な検索フォームを作ったのだが、テキストフィールドで検索すると下記のエラーが発生。 rails3系の時はこんな現象おきなかったがなぜだろう、、 rails incompatible character encodings: ASCII-8BIT and UTF-8 = form_for @search_form,:url =…

passengerを複数のrubyのバージョンで動かす

rbenvでrubyのバージョン管理をしていて、色々なバージョンでpassengerを動かすとなると、なかなか手のこんだことをしないといけなかったが、passenger4以上からvirtualhostの設定で簡単に対応するrubyのバージョンを切り替えられるようになった。 passenger…

rbenvをシステムワイドに導入する

僕が管理しているVPS(Linux)はrbenvでrubyのバージョン管理を行っている。 しかし、現状では一般ユーザーにrbenvを入れてしまっているため、他のユーザーを追加した際に各ユーザーごとにrbenvを導入する必要がる状態である。 そこで、system wideにrbenvを…

Rails4.1をproductionモードで起動する

Rails4.1系でのproductionモードで起動する手順を簡単にまとめた。 データベースの設定 production用のDB接続情報を追記 default: &default adapter: mysql2 encoding: utf8 pool: 5 timeout: 5000 production: <