rails

RubyからGroongaを使う2

RubyからGroongaを使うためにrroongaというgemを使います。 以下作業のログ。 # mroonga対応 gem 'rroonga' まずはチュートリアルを参考にテーブルを作成してみました。 irb --simple-prompt -rubygems -rgroonga Groonga::Context.default_options = {:enco…

rails4の条件付きアソシエーション

Rails4から条件付きアソシエーションの記述の仕方が変わりconditionsパラメータが非推奨になりました。変わってどう書くのかを以下に記載します。テーブル同士の関連(1体多など)に条件を追加した場合があります。例えばusersテーブルとcommentsテーブルがあ…

RailsとHerokuと全文検索 その2

elasticsearchを使うため色々調べ中。 クラウドサービスのbonsaiを使うため実装しておりますが、接続エラーが出てしまう。 テストとローカルでは、多分別の方法を考えた方が良いのかな。 取りあえずGemfileには、こんな感じで記述 41 # elasticsearch対応 #g…

RailsとHerokuと全文検索 その1

Herokuで動かすRailsアプリに全文検索の機能を追加しようと思った。 で全文検索のソリューションを何にするか考えた時にGroongaかElasticsearchかなと思いました。 で、Herokuで動かすと考えた時にElasticsearchが良いと思い採用することにしました。Heroku…

travis ci連携続き

herokuに自動でディプロイまでさせたい場合は、以下のように.travis.ymlに記載します。 deploy: provider: heroku api_key: secure: ******************************* app: [APP_NAME] on: repo: [git_repo_name]これはtravis ciのコマンドラインツールを使…

travis ci連携

前もやったのですが、今書いているコードをtravis ci連携した。 で、色々書いたのでメモしておくが、要はGemfileと.travis.ymlを書けば良い。 Gemfileには以下を追加する必要があった(多分別の何かが足りないからかもしれないけど) # travis ci対応? group :…

ActiveRecordのnewとbuild

ActiveRecordでモデル間の関連を定義している場合でインスタンス化する時にnewでなくてbuildを使うとコードがすっきりする。 これはパーフェクトRuby on Railsを読んでいて「へー」って思ったのでメモ。例えばUserとMovieで1対多の関係がある場合は以下のよ…

active_decoratorも使ってみた

前回の記事でdraperを使ってview側のロジックを減らすというのを書きましたが、今回はactive_decoratorです。設定の仕方は簡単です。 Gemfileにまずは追加してbundle installを実行してインストールします。 gem 'active_decorator'$ bbundle install --path…

draperを使ってviewに書いてしまいがちなロジックを減らす2

先日書いた記事でdraperについて紹介しましたが、これの続きです。 railsでページネイションを使う場合、最近はkaminariを使うケースが多いと思います。で、このkaminariを使って取得した値(例えばMovieというモデルがあるならばMovie.page(1).per(20)という…

draperを使ってviewに書いてしまったロジックを減らす

view側に表示するためにデータを整形するロジックを書いてしまうことなどあると思います。 そういう場合helperを使うというのも一つ手ではありますが、最近ではpresenterという層を設けてviewからそういったロジック部分を取り除くやり方が主流となって来て…

テストを並列で実行させてスピードを上げる

テストの実行速度を上げるために、テストを並列で実行させたい場合があります。 その場合はParallel_testを使います。まずGemfileに追加します。 gem "parallel_tests" 続いてconfig/database.ymlを以下のように編集します。今回はSqlite3の場合です。 test: …

FactoryGirlsを使っているが

FactoryGirlsの使い方で、いつも FactoryGirl.create(:current_user_group1) 見たいに書いていたのですが、この最初のFactoryGirlっていうのは省略出来るんですよね。 だから最近加わったプロジェクトではこれを削除しています。それとActiveRecordでレコー…

youtub検索APIを使う

現在風邪で頭がぼーっとしているのですが、少し良くなったのでyoutub検索APIを使って動画の検索をしてみました。 用意するのはまずDevloper Key。ここから行けます。 で、今回私はyoutube_itというgemを使いました。 gem 'youtube_it' $bundle install --pat…

rails4でActiveRecordの初期値をセットする方法を教えてもらった

rails4で今開発しているんですが、ActiveRecordの初期値を設定する方法があるようで教えてもらいました。例えば今までだと user = User.new user.name = 'hoge' ・・・・ ・・・・ user.status = 0 # default値 みたいに書いていたところを class User after…

railsのcontrollerのテスト続き

ちょっとメモ書き。 controllerのテストでcontroller内で定義したメソッドの戻り値のチェックをする時はassiginsメソッドを使う expect(assigns[:user].name).to eql('testUserName') 例えば上記みたいに。 またそれ以外にresponse.statusでステータスコード…

before_filterで指定したアクションをある処理だけ実行させてくない場合の書き方

以下メモの意味も込めて。。。。表題の件ですが、色々やり方はあります。 一つは before_filter :login? , except: [:index] のようにexceptを指定するやり方。 もう一つは skip_before_filter :login?, only: :index を使って該当する処理だけbefore_filter…

guardを使ってrubocopも実行、コーディングチェックをこまめにチェック

コーディング規約のチェックとしてrubyではrubocopを使うと思います。 で、これをjenkinsなどのCIにかませてかませてチェックさせますが、gitにコミットする前に自分でチェックというのを自動化させたいと思いguardでテスト動かすので同じようにやってくれな…

モデルのannotateを出力するgem

モデルに対応するテーブル定義をコメントとして出力してくれる便利gemのannotateについてです。 今使っていますが、忘れないようにメモですソースはここまずはモデルに出力させてみましょ。テストとかは対象外にしたいので、以下のように書きます。 bundle e…

railsテンプレートについて

前回railsテンプレートを使ってrails newする時に、いつもやるような事はなるべくこのタイミングでやってしまおうということを書きました。で、先日新しく作ってみたいrailsアプリがあったので、テンプレート使ってrails newしたのですが、rakeが一切動かな…

railsのテンプレートの追記

deviseの設定を生成するのとconfig/applicatoin.rbに設定を追記する場合は以下のようにテンプレートファイルを作る # devise generate generate 'devise:install' generate 'devise user' rake 'db:migrate' # config setting application do %Q{ config.gen…

ActiveRecordのアソシエーションにメソッドが掛けると聞いて・・・

RailsのActiveRecordのアソシエーションにメソッドが書けるとというブログを見たので、自分でも試してみた。 class User < ActiveRecord::Base has_many :events do def latest order('created_at DESC') end end end で取得してみる @events = @current_use…

Rails newで自作テンプレートを使って初期に毎回やることを自動化する

Railsのアプリケーションを最初にnewで作成する時に、大体いつも使うgemの設定をまず最初にします。 例えばrspecを使えるようにしたりだとか、twitter-bootstrapを使えるようにとか・・で、これは毎回やる作業になってきて、ここを自動化した方が効率良いな…

guardを使ってソース編集後にテストを自動実行する

何かソースを変更した時に、テストを実行して動作を確認すると思いますが、いちいち $ bundle exec rspec spec/~~~~のように入力して確認するのも面倒だと感じることもあるかと思います。 そういう場合はguardを使ってテストの実行をdaemon化するのも良いと…

railsでnewrelicを動かすためには

Herokuを使っているパフォーマンス測定ツールとしてよく使うのは、newrelicというサービスです。 これを使うと核処理にかかる時間やエラー発生率、SQLの処理時間、そしてブラウザの使用状況など様々な情報を見る事ができます。今回はこれを使うための設定を…

rails4.1をHerokuで動かすときのdatabase.yml

rails4.1で作成したWebアプリケーションをHerokuで動かすときにdatabase.ymlの設定を書かないとdb接続ができずエラーになります。で、それを回避する方法として以下のようにdatabase.ymlを書けば良いので忘れないようにここに書きます。 production: url: <%…

Railsで簡単アクセス解析をする場合に使うgem

最近はサービスを立ち上げてそれを発展させる上でアクセス解析というものは必須になっていると思います。多くの場合はGoogleさんを使っていると思いますが、gemもあるので、それを使ってみました。Ahoyというツールです。使い方は簡単です。1.Gemfileに以下…

今更ながらgemを作ってみる。続き

DB周りのgemを作成しているのですが、railsの場合はDBの接続周りはconf/database.ymlから読みとります。なので、そこを読み取る周りについてです。railties/lib/rails/application/configuration.rb を参考にしたりしました。 でコードですが、以下です requ…

Rails4.1 サポートしているmimeタイプは?

Rails3ではmime typeがpdfのデータに対してサポートしてなかったので、書籍を見ながら拡張するということはやったが、4.1ではどうなのか見てみた。すると「action_dispatch/http/mime_types.rb」を見てみると以下のコードが追加されていた。 Mime::Type.regi…

railsの原則

「railsではステータスコード500を返す処理以外は、例外を投げてはいけない。」 ということか・・・・。参考:こちら

Rails4.1のenumを使ってみる

Rails4.1の新機能の一つenumをつかってみました。 1 class Music < ActiveRecord::Base 2 enum status: %i(latest old popular) 3 4 end 定義は2行目に書かれているように書きます。 で、実際に使ってみましょ。 $ bundle exec rails c $ music = Music.lat…