リア充爆発日記

You don't even know what ria-ju really is.

Ruby on Rails

RailsとMySQL5.6.xで全文検索をやってみた

時間がないので備忘録的に書いていく。http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html 前提 全文検索には、Natural Language Full-Text SearchesとBoolean Full-Text Searchesがある。 日本語で前者を使うには、分かち書きを別途導入する必要…

Rails4のconcernsなmoduleのテストをrspecで書く方法

Railsとcapybaraで何かをドラッグアンドドロップしてソートするテストを書くではカテゴリをソートするfeaturesなテストを書いたけど、アレには当然modelのテストもある。モデルにはCategory.reorderという並び替えを行うメソッドがあって、これのテストはcat…

Railsとcapybaraで何かをドラッグアンドドロップしてソートするテストを書く

今回はカテゴリを画面でソートできることをテストする。たとえばブログで言えばブログカテゴリの表示順を管理画面でソートしたいとき、などの話。 こんな画面で、ドラッグアンドドロップでソート後、更新ボタンを押したら、その順番に更新される、という仕様…

RubyでEnumを使いたかったらenumerize

追記)この記事古いので、Rail4.1以上を使う場合は、ActiveRecord::Enum使ったほうがいいと思います。https://github.com/brainspec/enumerize結論からいうと、これはいいです。 例えば職業や性別なんかのDBで管理するほどのもんじゃないものはコレで扱うと…

Redmine2.4をインストールしようとしてMysql2::Error: Index column size too large

Redmine2.4をCentOS6.4+MySQL5.5にインストールしようとして、ひさしぶりに以下のエラーをみた。 Mysql2::Error: Index column size too large. The maximum column size is 767 bytes.: CREATE INDEX `wiki_pages_wiki_id_title` ON `wiki_pages` (`wiki_i…

Railsでバリデーション前に文字列の前後のスペースやタブを取り除くメモ

ベースにこれを使う。 https://github.com/holli/auto_strip_attributes gem "auto_strip_attributes", "~> 2.0" で、これだけだと全角スペースには対応してないけど、さいわい好きな処理を挟めるフィルター機能があるのでそれを使う。っていうか、これ使う…

RailsにJbuilderを導入したら、レスポンスが帰ってこなくって困ったでござるの巻

まず最初にJbuilderってJavaのなんかだと思った。富士通とかそういうところが出してるIDEとかなんかそういうの。10万くらいしそうな。で、そうじゃなくてレスポンスをjsonで組み立てるときに使うやつ。 https://github.com/rails/jbuilderWebAPIサーバなんか…

Railsでforce_sslしたらELBのヘルスチェックが通らなくて困ったときのメモ

いろいろ紆余曲折したけど、ELBからのリクエストヘッダにはHTTP_X_FORWARDED_FORがついているが、ヘルスチェックにはついてないので、これを利用する。environments/staging or production config.force_ssl = true config.ssl_options = { exclude: proc { …

Railsのmigrationで緯度経度をdecimalで設定する

http://guides.rubyonrails.org/migrations.html と http://dev.mysql.com/doc/refman/5.6/en/fixed-point-types.html と http://gis.stackexchange.com/questions/8650/how-to-measure-the-accuracy-of-latitude-and-longitude/8674#8674文系なんで、用語の…

RailsのDirtyはなぜDirtyというのか。

教えてください。http://api.rubyonrails.org/classes/ActiveModel/Dirty.html ActiveRecordの状態をトラッキングできる便利なモジュール。これを使うと、非公開から公開になったタイミングで公開日を入れる、的な処理がキレイに書ける。 before_save :publi…

Railsで管理用のアプリをnamespaceで同居させるときのメモ

やりたいこと 管理アプリもフロントアプリも同じプロジェクト内で共有するのがいいに決まってる。と思ってる とはいえフロントからアクセスされないようにネットワーク設定以外に、アプリ的にも対応しておきたい。 管理アプリは/adminというプレフィクスパス…

PaperClipでリサイズ指定

ありがたやありがたや・・・http://blog.rono23.org/12 '100' 横幅固定でリサイズ 'x100' 縦幅固定でリサイズ '300x200' 指定した値を最大値としてリサイズ '300x200^' 指定した値を最小値としてリサイズ '300x200>' 指定した値より、大きいときリサイズ '30…

strong parameterとaccepts_nested_attributes_forを併用する方法

こんな感じのとき class Parent < ActiveRecord::Base has_one :child accepts_nested_attributes_for :child こんな感じでやる params.require(:parent).permit( :name, :name_kana, child_attributes: [ :name, :name_kana, ] ) 福本作品もいいけど、甲斐…

Railsで検索フォームのバリデーションをかける

検索フォームの入力値もちゃんとバリデーションかけないと脆弱性のスクツになってしまいます。RailsCastにひとつの答えが載ってた。 http://railscasts.com/episodes/111-advanced-search-form-revised ※有料記事 かんたんにまとめると、検索をひとつのリソ…

RailsにJavaScriptのimage_path

erb以外でassets配下の画像を参照するとき、SASSにはimage-pathというナイスなヘルパーがあるのにJSにはない。困る。こういう誰でも困りそうなことは絶対誰かがなんとかしている。なんとかしていた。 http://dennisreimann.de/blog/referencing-rails-assets…

belongs_toでthrough的なことを実現する

例えば複数画像付き投稿ができる掲示板をイメージしたとき、スレッド→投稿→画像という多段構成のモデルができる。で、となりあう関係のモデル同士は、has_manyとbelongs_toで参照しあえるけど、スレッド→画像や画像→スレッドは一工夫する必要がある。スレッ…

Railsで開発してて"Resource interpreted as Font but transferred with MIME type font/woff"

http://stackoverflow.com/questions/12644391/rails-3-web-font-woff-mime-type Rackのmime typeのリストにないからということで、config/initializers/mime_types.rb Rack::Mime::MIME_TYPES['.woff'] = 'application/x-font-woff' これでサーバ再起動で消…

capistranoでdeploy:cleanがハングする

CentOS6.3で発症。パスワードを聞かれて入力したあと、タイムアウトするまでハングする。 https://github.com/capistrano/capistrano/issues/474capistrano-2.15.3/lib/capistrano/recipes/deploy.rb task :cleanup, :except => { :no_release => true } do …

RSpecのおともにdatabase_cleaner

何かの拍子にテストの一部が通らなくなった。コードを追ってみても原因がわからず、そこそこハマった結果、DBにゴミデータが残っていることが原因だとわかった。きっと実行の途中で止めちゃったりしたんだろう。 また同じようなことが起きたら、きっとこれを…

それでもFactoryGirl+RSpecが遅いと感じたら

Railsのrspecが遅いので対応した結果wwwwwwwwwwwwwwからしばらくして、やっぱり全体的にテストが遅い・・・!と再認識し、コードを書くのにストレスを感じてきたから本腰入れて調べてみることにした。で、結果がしょぼかったから経緯は省いて…

Capybara::ElementNotFound: Unable to find field "ホニャララ"

これは単純にHTMLのマークアップがおかしいだけ。 どうせコピペかなんかしてラベルとテキストフィールドの名前が違っているだけなんだろ?こんな感じに。 <%= f.label :name, t('common.title') %> <%= f.text_field :title, placeholder: t('common.plz_inp…

FactoryGirlでmodelのbefore_createとかを飛ばしたいとき

FactoryGirlに限った話じゃないけど。で、どうするかというとskip_callbackを事前に呼ぶ。 Model.skip_callback(:create, :before, :set_default_status) :set_default_statusは任意のフィルター。 いろいろやってみたけど before_create { self.status = "a…

has_oneのcreateとbuild and saveの違い

userモデルとhas_oneの関係にあるpassword_resetというモデルがある。 パスワードリセットのときに使うtokenとタイムスタンプをとっておくためのモデルでuserモデルの一部でもいいんだけど、たまにしか使わない要素は分けたい派なので分けている。具体的には…

Railsのバリデーションでエラーメッセージが重複するのを避けてみる

Railsのバリデーション機構を使っていると、エラーメッセージの表示がうまくない。 たとえばメールアドレスの入力バリデーションで、必須チェックとフォーマットチェックを以下のように入れたとする。 validates :email, presence: true, format: {with: VAL…

Rspecでスタブを使ったときのメモ

こんなコードがあったんです。 メールアドレス変更をするときに、ユーザーIDと新メールアドレスとトークンを持つモデルのテストで、トークンがかぶったらマズイからbefore_saveでunique_tokenという、渡されたトークンが既に存在しないか確認するメソッドを…

SporkからSpringに乗り換えた結果wwwwwwwwwwww

今までrspec + guard + sporkでやってきましたけど、sporkのテストにしか効かないあたりとかはイマイチだなぁ、と思ったので噂のSpringに乗り換えてみることにした。 Gemfile group :development, :test do gem "rspec-rails", "~> 2.13.0" gem "guard-rspec…

Railsのrspecが遅いので対応した結果wwwwwwwwwwwwww

rspecで書いているテストが遅い。CPUもめちゃ回る。めちゃ回ってあのスピードか。rspec + guard + spork(spring試したい)で自動テストを回しているので、あまりテストのパフォーマンスが開発に影響することはなかったんだけど、けっこう大きいmodelの修正…

Railsで「このタイミングだけこのバリデーションしたい」っていうとき

パスワードの変更機能を作ってて パスワードはUserモデルの一部 パスワード変更画面は他の項目(都道府県とかのプロフィール項目)を変更する画面とは別 である場合、新しいパスワード(:password)はプロフィール変更時はバリデーションしたくなくて、ユーザ…

オレオレ証明書でsslをaction単位で、かつnginx + unicorn + rails

ステージング環境とかで需要があるかもしれない、ぶっちゃけ証明書がオレオレかどうかはあまり関係のない話。 アプリの対応 全体的にSSLにするならconfig/enviroments/あたりにconfig.force_ssl = trueしておけばいいのだけど、action単位でforce_sslしたい…

AWSにRailsをデプロイするのはBeanstalk or OpsWorks?

AWSはアプリケーションマネジメントサービスとして、Elastic BeanstalkとOpsWorksの2つを用意している。どっちがいいのか?の判断基準の参考として公式には以下のページがある。 http://aws.amazon.com/application-management/カンタンに言えば コードさえ…