irbでRSpecのmatcherを試す
irb内でさくっと試したくなったので。
require 'rspec' include Rspec::matchers true.should be_true
Mockを試す場合は
require 'rspec/mocks/standalone'
Gemfile.lockをバージョン管理すべきか
http://langturn.com/translations/33?locale=ja
bundlerの作者によると
・gem開発時にはいらない
・アプリ開発時には必要
ということらしい。
bundle installを実行することで、Gemfile.lockが生成され、そのファイルを配布することで
どの環境でも同じgemの依存環境が再現できる。という内容。
現在の僕の運用だと、Gemfile.lockは毎回生成したのだけど、あまりおすすめされない方法らしい。
理由は、developmentでしか必要ないgemをproduction環境に入れたくなかったから。(rspecとかsqliteとか)
デプロイするたびに、
bundle install --without development test
してたのだけど、どうしようかなぁ。
Railsのユニットテスト時にDBの変更が反映されない
しばらく悩んでしまったのだけど
ユニットテスト時のDBが更新されてないだけだった。。
rake db:migrate RAILS_ENV="test"
して解決
この辺うまくやってくれるgemとかあるのかなー
メソッドの名前を聞く
メソッドの名前忘れたときに、そのオブジェクトに聞いてしまうのが手っ取り早いのに気づいた。
Railsが用意してくれるとかメソッド覚えてられない。。
例えば、数値を変換してくれるメソッドを探す時は
1.methods.grep /to_./ #=> [:to_s, :to_f, :to_i, :to_int, :to_r, :to_c, :respond_to_missing?, :to_enum]
みたいに、配列で返してくれる。
methods は、特異クラスのメソッドも全て返却してくれて、
methods(false)を渡すと、特異クラスのメソッドは省いて返却される
他にも色々あるけど(http://ref.xaio.jp/wikis/2/entries/search?q=methods)、ぱっと調べるには、methodsをgrepが楽
Railsのutf8パラメータとcommitパラメータ
Railsで検索フォームみたいなのを作るとき、RailsGuide通りにすると
<%= form_tag("/search", :method => "get") do %> <%= label_tag(:q, "Search for:") %> <%= text_field_tag(:q) %> <%= submit_tag("Search") %> <% end %>
↑みたいなコードになり、フォームから遷移するURLに
「/search?utf8=✓&q=&commit=Search」
のようにutf8パラメータとcommitパラメータがつきます。
まぁ別に困らないのだけど、よくわらないパラメータがURLに追加されるのはいまいち。。
ちょっと気になったので、それぞれ調べてみました。
・utf8パラメータ
出力自体は、↓のutf8_enforcer_tagで行われています。
https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_view/helpers/form_tag_helper.rb#L607
helperでoverrideしろと書いてあるので、気になる場合は、overrideすればよいようです。
ただし、戻り値をなくしてしまうと、このメソッドの戻り値に対してさらにタグを追加するのでエラーが発生してしまいます。
空文字を返しておけばok。
もうちょっと調べてみると、このパラメータは、古いIE対策にセットされたものようです。
http://stackoverflow.com/questions/4104474/rails-3-utf-8-query-string-showing-up-in-url
IE5以前は、accept_charsetが無視されてしまうとかなんとか。
submitするときに、パラメータに強制的にunicode文字を含めることで対応しています。
元々は雪だるまだったのだけど、現状のRailsではチェックマークになったみたいですね。
・commitパラメータ
どのボタンが押さたのか、サーバ側で判断できるように、デフォルトでついているようです。
(params[:commit] みたいな感じで)
submit_tagから出力されるHTMLがデフォルトで下記のようになっているので、commitパラメータが付加されます。
<input name="commit" type="submit" value="Save changes">
ソースは、↓のようになっているので
https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_view/helpers/form_tag_helper.rb#L428
submit_tag のoptionとして :name=nil を渡せばok
<%= submit_tag "Search", :name => nil %>
とすれば、inputタグのname属性が出力されなくなります。
rbenvに乗り換えてrailsにパスが通らずはまった
macportアンインストールして、homebrewインストールして、rbenvでrubyインストールした。
その辺りはたくさん情報あったのだけど、そのあとではまった。
gem install rails
してもrailsにパスが通らない
.rbenv/shims/rails
がなぜか存在しない。。
結局
gem install railties rbenv rehash
で解決した。
railsコマンドはrailsには存在してないからとかそういう感じらしい。