railsにおけるurl伝達現象
詳細
最近、仕事中に問題が発生し、テストコードを書いたときに発見されました.
コントローラ:
テストコード:
テストを実行すると、次の行でエラーが発生し、実際にretval.count=3の、つまりプログラムがelse文を歩く部分です.ただし、コントローラ内のparams[:type]を変更すると、このエラーは発生しません.
これはなぜですか.
ruby内はnilとfalseを除いてtrueだと言っているのではないでしょうか.条件としてparams[:type]と!params[:type].nil? 結果は同じじゃないの?
最近、仕事中に問題が発生し、テストコードを書いたときに発見されました.
コントローラ:
class AnysController < ApplicationController
before_filter :require_admin
def index
if params[:type] then
@anys = Any.list_by_type(params[:type])
else
@anys= Any.all
end
end
end
テストコード:
# it is not true
Any.create(type: 1)
Any.create(type: 2)
Any.create(type: 4)
assert_equal Any.all.count, 3
get 'index', :format => :json, :type => 1
retval = JSON.parse(@response.body)
assert_equal retval.count, 1
テストを実行すると、次の行でエラーが発生し、実際にretval.count=3の、つまりプログラムがelse文を歩く部分です.ただし、コントローラ内のparams[:type]を変更すると、このエラーは発生しません.
if !params[:type].nil? then
...
これはなぜですか.
ruby内はnilとfalseを除いてtrueだと言っているのではないでしょうか.条件としてparams[:type]と!params[:type].nil? 結果は同じじゃないの?