railsにおけるurl伝達現象


詳細
最近、仕事中に問題が発生し、テストコードを書いたときに発見されました.
 
コントローラ:
 
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? 結果は同じじゃないの?