rails

テーブル作るまでもないマスターデータに関してはactive_hashを使う

データ更新はない、ただ参照するだけのデータ群をいちいちテーブル作るのも面倒だしなーという場合active_hashを使うと良いです。あたかもActiveRecordを使ってテーブルからデータを取得しているかのように扱えるし、何かと便利です。

herokuでfluentDを動かす

herokuで動かしているアプリケーションのログを収集するのにfluentDを使おうと思い、調べたらherokuでfluentDを動かすサンプルが公開されていたので、早速入れてみた。これやこれを参考にしたが、今回は後者のgithubのサイトからherokuにディプロイして自分…

Railsのenum機能を使う

railsのenum機能を使ってみた。 class Test enum type: { todo: 'Todo', doing: 'Doing', done: 'Done' } end この場合色々なサイトに書かれている通り以下のメソッドが使える Test.todo # typeが'Todo'のものの一覧を返す ※SQL=> SELECT "tests".* FROM "…

delayed_jobを使う時の注意

delayed_jobを使う時、非同期に実行したいメソッドの前にdelayというメソッドを入れます。 例えば、TestBatchクラスのexecというクラスメソッドがあり、それを非同期に実行させたい場合、 TestBatch.delay.exec となります。 ただここで注意が必要です。ここ…

RailsでHTMLメール実装するときにHelperメソッドを使いたい場合

RailsのHTMLメールのテンプレートないでApplicationHelperのメソッドを使おうと思ったが、デフォルトの状態では使えません。 じゃ、どうするかと言えば、app/mailers/以下のクラスに以下の一行を追加すれば良いのです。HogeMailerというクラスがあるとして c…

ActiveRecordのrewhereメソッド

ちょっとどのような状況で使うのか、まだピンと来ないけどActiveRecordにはrewhereっていうメソッドがある。 これを使うと前に宣言していたwhere条件をoverrideすることができる。 #rewhereを使ってもその前にpointっていうカラムで条件指定してないからover…

ActiveRecordのmergeメソッドについて

ActiveRecordでテーブルのjoinをする場合以下のように書くと思います。 User.joins(:auth_providers).all.where(auth_providers: { provider: 'facebook' }) 発行されるSQLは次のようになります。 SELECT "users".* FROM "users" INNER JOIN "auth_providers…

RailsとJavascriptの連携

RailsアプリケーションとJavascriptの連携をしたい場合、[gon](https://github.com/gazay/gon)というgemがあります。これを使うとcontroller内でセットした変数をJavascript(rails3以上だとcoffeescriptを使うケースが殆どだと思いますが)内で使う事ができ…

Railsの静的解析ツール

現在業務で使っている解析ツールはrubocopだけだけど、他にも面白いツールがあったのでメモ。まずはrails_best_practices。これはrailsのコードを解析して、よろしくないものを教えてくれます。なかなか良い。rubocopはコーディングチェックなのでrubyとして…

Rails4のJoinについて -> [訂正]includesメソッドでした

Railsでincludesメソッドを使ってjoinする場合はActiveRecordのjoinsメソッドを使います。 User.includes(:photos) で絞り込み条件がある場合は、例えば以下みたいに記述します。 now = Time.zone.now.at_beginning_of_day User.includes(:photos)where(phot…

Railsのsaveメソッドでtrue/falseでなくオブジェクトを返したい場合

通常の場合ActiveRecordのsaveメソッドの戻り値はtrue/falseですが、そうでなく更新結果のオブジェクトを返したい場合以下のように記述するとできます user = User.find(1) user.tap(&:save)

Rails4.2から追加されるActiveJobについて

rails4.2のbeta2が出ましたね。 以前かいたActiveJobについて、修正があったので改めて記事を書きました。ActiveJobとはRails4.2から追加された仕組みで、delayed_jobやresqueなどのキューイングを行うgemを同じインターフェースで使えるようにしたものです…

stackprofを試しに使う

先日のRubyKaigi2014で紹介されたstackprofという解析ツールがあったので、試しに使ってみた。 設定は簡単で gem install 'stackprof' で入ります。Railsで使う場合はGemfileにセットしても良いかもしれません。 書いたらbundle installを実行。以上で設定は…

hypermicrodataを試すの続き

gemのインストールが出来なかったので、Gemfileに以下のように記述してインストールをしてみました。 gem 'hypermicrodata', git: 'git@github.com:tkawa/hypermicrodata.git' これでbundle installでgemのインストールは完了です。 早速使ってみようと思い…

hypermicrodataを試す

個人的な研究でAPIの実装をしようと思い、先日のRubykaigiで紹介されたhypermicrodataを使ってみようと思いました。これはJSONを返すというよりか、HTMLをパースして返すAPIの新しい方式(?)の提案のように感じ実際に自分でも色々動かしながら色々感じてみた…

Rails4.2の新機能AdequateRecordって

Rails4.2から追加されるActiveRecordの機能にAdequateRecordなるものがあります。 で、これは何かなと見ているとここに記事が書いてあります。ここを見るとfindメソッドやfind_byメソッド時にキャッシュされるから、処理スピードが上がるよという機能と思わ…

Rspecを書く時に参考にすべきサイト

最近rspecのバージョンを3.0.0.beta1から3.1にアップグレードしようと思っているのですが、ちょっと手間取ってしまっています。 ちょっと原因が分かったら色々纏めたいと思っています。で、今日の記事はrspec繋がりで、書き方についてです。今後書き方はここ…

rails4.2をいじってみる(ActiveJobs)

Rails4.2の最新機能のActiveJobを使おうと思い、少し調べてみました $gem install rails --version '~>4.2.0.beta1'このActiveJobは4.2から新たに追加されるキューイングのフレームワークです。 何か動かしながらと思い、サンプルプロジェクト作成。 $ rails…

Railsのステータスコードのシンボル表記一覧

このブログからのコピーです。何かの時にパッと見れるように。Status Code Status Message Symbol 1xx Informational 100 Continue :continue 101 Switching Protocols :switching_protocols 102 Processing :processing 2xx Success 200 OK :ok 201 Created…

facebook graph apiのgem koalaを使って友達一覧を取得する件

友達が全件取れないのでおかしいと思ったら、Ver2.0からそのアプリでfacebookログインしている友達の数に仕様が変わったらしい。 なので、本当の意味で友達の数を取得したいのであればv1.0を使うようにしないと駄目。でコードで以下のようにkoalaが使うapiの…

仕事でfacebook graph apiをいじるgemを使ってみた

facebookログインはomniauth_facebookとかよく使いますが、facebook内の情報を扱う時に何を使うか、今まであまりちゃんと見てませんでした。 で、先日業務でkoalaを使ったのですが、これは簡単で良いですね。1.インストールはGemfileに追加してbundle instal…

Railsでテーブルに関係ないmodelを作って検索処理を作ってみる(elasticsearchを使って)

今回検索用DBは考えた末にelasticsearchを使う事にしました。会社でも使われだしていて、何よりもHerokuでelasticsearchのAddOnが複数あったからです。mroongaをやるには結構大変そうだったので、これは別の機会に・・・。で使うライブラリですが、昔やった…

Railsでテーブルに関連しないmodelを作って検索処理を作ってみる(まだ道半ば)

まずRailsもActiveModelを使います。コードは以下のような感じです class SearchMovie include ActiveModel::Model attr_accessor :keyword validates :keyword, length: { within: 3..20, too_long: '検索文字が長過ぎます', too_short: '検索文字が身近す…

githubとpivotaltrackerの連携

前から使って入るがgithubの個人プロジェクトの各機能をpivotaltrackerを使って管理するようにしています。将来的にはこれをもっとメインで使うように会社でもしていければとおもっています。 で、ソース管理はgithubなので、このgithubとpivotaltrackerを連…

Railsのroutingについて

Railsのroutingでは、resourceを考えないといけません。URLもそれに対応していきます。 例えばblogというresourceに対してcommentというresourceが複数ある場合だとcong/routes.rbでは resources :blog do resources :comments end のように書きます。更にna…

ActiveRecordで値の変更前・後の値を見て処理をしたい場合

テーブルのあるカラムの値が更新された時だけ処理をしたいという場合があると思います。その場合、以下のように[カラム名]_wasで変更前の値がとれます。 class Test < ActiveRecord::Base STATUS_SLEEP = 'sleep' STATUS_ACTIVE = 'active' after_update do …

rspecでプライベートメソッドのテストを書きたい場合は

テストを書くとpublicのメソッドだけでなく、privateについても書きたくなる事が暫しあります。 javaの場合だとリフレクションを使ってできますが、rubyの場合、どうするのかなと思って調べたらそこはsendメソッドを使えば出来るとあり、あー確かにそうだと…

Railsのクラスパスについて

railsの中身をみてみようと思い、まずはappフォルダなどrailsの各フォルダを読み込む処理をしているところはどこか色々みてみた まずはrails/railties/lib/rails/engine/configuration.rbのpathsメソッドに書いてあった。 def paths @paths ||= begin paths …

railsの自動読み込み(authload_paths)の中身を見たい場合

railsでちゃんとディレクトリにパスが通っているか確認したい場合「ActiveSupport::Dependencies.autoload_paths」を使う確認できます。 p ActiveSupport::Dependencies.autoload_paths この1行を追加すると、どこがロードされているのか確認できます。 rail…

RubyからGroongaを使う3

全文検索を行う処理は以下のように書いてます。まだ絞り込み検索書いてなくてデータ登録と取得の部分の一部ですけど。 require 'groonga' module Searchable extend ActiveSupport::Concern included do end def self.add(path = [DBファイルのパス], table_…