maeshimaの日記

メモ書きです

rails

validates_confirmation_of

validates_confirmation_of は valid? ではチェックされず、saveの時にチェックされるっぽい confirmation用の属性がnilのときはチェックされないみたい。

複数ユーザ毎のコメント数を調べるコード

復習用エントリ。これは絶対に覚えなくてはならないコード! user = User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id") 各ユーザ毎に user.comments とすると、クエリがユーザ数分発行され…

ActiveRecord::RecordInvalid と ActiveRecord::RecordNotSaved

ActiveRecord::RecordInvalid を手動で raise するには引数として model オブジェクトが必要。 下記のように、validationに失敗したオブジェクトを取得できる begin complex_operation_that_calls_save!_internally rescue ActiveRecord::RecordInvalid => i…

Arrayを分割する系のメソッド

railsで拡張されたメソッド。 Array#in_groups(n) n個の配列を持つ配列を返す。 Array#in_groups_of(n, fill_with = nil) n個の要素を持つ配列を持つ配列を返す。each_slice と似てるけど、配列(の配列)を返すメソッドであるというのと、fill_with に何か値…

SCSSの関数で出来ること

lighten(), darken() に感動したので、他にSCSSでなにが出来るか気になった。Module: Sass::Script::Functionsを見てざっくりおおまかにまとめました。 出来ること 赤色、緑色、青色の調整 色相、彩度、光度の調整 透明度の調整 明るさの調整 二色をまぜる …

Rails 3.1 で annotate_models

Rails 3.1 だと annotate_models がうまくうごかないっぽい -> annotate のhead なら大丈夫だったctran/annotate_models - GitHub

sunspotで検索する

Working with search - GitHubの意訳。 検索ことはじめ Sunspot.search メソッドで検索できる。引数は検索で使う一つ以上のクラス(モデル)。オプションでブロックに検索条件を書ける。一番簡単な例としては、渡したクラスのインスタンス全部を検索する物があ…

sunspot-rails-tester

justinko/sunspot-rails-tester - GitHubのREADMEの意訳。この gem は特定の箇所のテストで solr をオンにするためのもの。solr を使用せず、sunspot を stub 化することで不必要なインデックス構築を避けている。RSpec2 の spec_helper.rb の例。 $original…

sunspot_rails

sunspot_rails/README.rdoc at master from outoftime/sunspot - GitHubの意訳。Sunspot::Rails は Sunspot の Solr 検索を Rails に統合するためのプラグイン。下記のような機能を提供する。 config/sunspot.yml で sunspot の設定が出来る ActiveRecord を…

sunspot(solr)の設定方法

Advanced Fulltext Search Configuration - GitHubの意訳。デフォルトの設定だと、スペースか他の区切り文字で区切られている前提。区切りにはStandardTokenizerというのを使ってる。大文字小文字を区別させないようにするためにはLowerCaseFilterというのを…

sunspotのチュートリアル意訳

インストール solrのインストールはmacなら brew install solr でOK。Rails側はまずGemfileに gem 'sunspot_rails' を書いて bundle install。それから rails g sunspot_rails:install で config/sunspot.yml を作成。 solr のインスタンスを起動 下記の rak…

thinking_sphinx の設定

基本 config/sphinx.yml に設定を書く。下記のように database.yml っぽく environment 毎に設定を分けることが出来る。 development: port: 9312 test: port: 9312 production: port: 9312 rake ts:conf などとすると、このファイルを元に設定ファイル(conf…

ASCIIcasts - Template Inheritance

ASCIIcasts - “Episode 269 - Template Inheritance”を見て。以前、Edge Rails.info :: Template Inheritanceを見て、3.1 から 「デフォルトのビューの位置にファイルがない場合は、親のコントローラのビューを見る」という仕様が追加されるのは知ってた。で…

3.1のストリーミング機能の話

Automatic Flushing: The Rails 3.1 Plan « Katz Got Your Tongue?を読んで。3.1のストリーミング機能の実装が大体どんな感じか、非常に詳しく書かれていてためになった。Fiberを使っている手前、1.9でしか使えないのね。

thinking_sphinx の rake コマンドまとめ

インデックスとコンフィグの作成 下記のうちのどれでもOK。 rake thinking_sphinx:index rake ts:index rake ts:in デフォルトでは、インデックスの作成に加えてコンフィグファイルも生成される。インデックスの作成だけしたいときには rake thinking_sphinx…

railsがTimeに追加してる便利メソッド

ActiveSupport::TimeWithZoneに追加されてる。 today? past? future? between?

thinking_sphinx 利用時のテスト方法

transactional fixtures をオフにしないと search メソッドは値を返さないそうな。 cucumber 1.3.2 から、thinking_sphinx は cucumber と連携しやすくするためのヘルパーメソッドを用意した。features/support/env.rb に下記の二行を足す。 require 'cucumb…

attributeの変更

changed? はともかく _was とかすっかり忘れてた><attributeの変更確認 - うんたらかんたら日記

メタプログラミングRuby 第3章

ブロックは定義された場所の束縛を保持する。 束縛とはローカル変数、インスタンス変数、selfなどの情報のこと スコープゲートは module class def class を Class.new {} にしたり、def を define_method {} にしたりすることでスコープをフラットにするこ…

今週のrailscasts - Authentication in Rails 3.1

#270 Authentication in Rails 3.1 - RailsCastsを見て。 Railsでのベーシック認証 secure_password force_ssl の三つについてだった。ベーシック認証以外は知ってたので省略。 ベーシック認証 3.1 から controller に下記のように書くだけでベーシック認証…

Capybaraをコンソールで試す

こんな感じで試せる>|ruby|| session = Capybara::Session.new(:rack_test, YourApp::Application) session.visit "/" session.fill_in "login", with: "login" |

今週のASCIIcasts - SASS Basics

ASCIIcasts - “Episode 268 - SASS Basics”を見て。 SCSSの仕様 ネストが出来る a:hover みたいなやつは &:hover のように & にするとネストできる $main-color: #FFFFFF; みたいに $ 使うと変数として使える 関数が用意されている。例えば darken(#FFFFFF, …

ASCIIcasts - CoffeeScript Basics

ASCIIcasts - “Episode 267 - CoffeeScript Basics”気になったとこだけメモ this は @ に置換 三項演算子は if then else に置換が可能 coffee script 中のエラーもコンソールに出力してくれる

Rails 3.1 の mass assignment

attr_accessible に :as オプションが付けられるようになったらしい。 class Project < ActiveRecord::Base attr_accessible :name, :as => :admin end のようにすると、 @project.update_attributes(params[:project], :as => :admin) のように、変更側で同…

モデル内で自分のテーブル名を返すメソッド

ActiveRecord::Base#table_name

3.1.0.beta1の action_dispatch/url_for.rb のコメントの意訳

ActionDispatch::Routing モデルとかでURLを生成したい場合は、ActionController::UrlForを見るといい。 知ってると思うけど ActionController::Base#url_for はリンクを生成する。link_to や url_for は水面下で ActionController::UrlFor、特に ActionCont…

javascript_include_tagは複数の引数をとれる

一つだけかと思ってた>< javascript_include_tag "common.javascript", "/elsewhere/cools" # => <script type="text/javascript" src="/javascripts/common.javascript"></script> <script type="text/javascript" src="/elsewhere/cools.js"></script>

ActionView::Helpers::TextHelper

Railsはかゆいところに手が届くなー。メモ truncate(text, *args) textが:lengthで指定した文字数より大きかった場合に、:lengthで指定した文字になるまで切り詰めて、:omission(デフォルトは"...")を末尾に付ける。これどうせバイト単位で日本語だとうまく…

ログ削除のrakeコマンド

log配下の*.logのサイズを0にするrakeコマンド rake log:clear

RailsCasts - Testing JavaScript with Jasmine

Railscasts - Testing JavaScript with Jasmineを見て。jsのユニットテスト環境 jasmineについて。基本的にRspecライクな書き方でjavascriptのユニットテストを実行することができる。すごく使えそう!!! rake jasmine でサーバ立ち上げてアクセスするとテ…