2014-01-01から1年間の記事一覧

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

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

gitメモ

git

ふとした時に忘れてしまっていたので、メモとして残すコミットを取り消したい場合 git reset --soft [コミットのHash値] git reset --hard[コミットのHash値]

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で権限チェックをするgem pundit

railsではユーザ毎にアクセス件を設定したい場合はpunditというgemをよく使います。 導入は簡単です。 gem "pundit"bundle install続いてgeneratorをつかってpunditで使うクラスを生成します。rails g pundit:installこれでapp/policies/application_policy.…

Railsのクラスパスについて

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

macでキーチェーンを削除して焦った件

githubのSSLエラーが出てたので、証明書をバシバシ消していたらgithubだけでなくfacebookも駄目になって凄く焦った。 その時にここのブログを見つけて同じように証明書をダウンロードして何とか解決。 いやー、危なかった。。。

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_…

RubyからGroongaを使う2

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

RubyからGroongaを使う

全文検索をプライベートで作っているアプリに入れようと思い、色々調べた. elasticsearchにしようかと思ったが、考えた結果Groongaにしようと決めました。でrroongaを使うことにして調べてみた(まだ途中ですが)。 参考にしたのはここ もう少し纏まったら、…

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

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

これは良い資料だ

これは良い資料なので、何かと読み返したりしよう。https://speakerdeck.com/katsuma/service-development-for-usersあとここも参考になるな https://github.com/Sdogruyol/awesome-ruby#imagery

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対多の関係がある場合は以下のよ…

Fiberについて

Fiberはruby1.9から追加されて機能です。この前いじっていた時、良くわからなかったのですが、ちょうどそれを解説しているwebページもあってそれをみて「あー」って感じになったので、メモしておきます。ようはFiberはyieldの処理の結果を保持し続けるという…

Procとlambdaの説明する時に書いたサンプル。

rubyの勉強会した時にblock、proc、lambdaについてちょっと理解が曖昧なところがあり、うまく説明しきれなかったので、復習した。 で、参考になる記事があったので、それを元に理解するために自分で手でコード書いてみた。 そのときのコードを覚え書きの意味…

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からそういったロジック部分を取り除くやり方が主流となって来て…

fiberとprocについて・・・その1

fiberは1.9から追加された機能です。 でprocと似ているのですが、微妙に違います。 $:.unshift(File.dirname(__FILE__)) fi = Fiber.new do |first| # 処理 second = Fiber.yield("#{first}!") "#{first}, #{second}" end puts fi.resume('hello') puts fi.r…

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

テストの実行速度を上げるために、テストを並列で実行させたい場合があります。 その場合は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…