2009年8月13日木曜日

[Ruby on Rails] ControllerとModelで空のパラメータの値が違う件

ひさしぶりにrailsをいじってて、今さらながら気がついたのでメモしておきます。

フォームから送信されたfoo[name]というリクエストパラメーターが空文字だった場合。

foo_controller.rb

class FooController < ApplicationController
def update
logger.debug(params[:foo][:name] == "") # => true

foo = Foo.find(params[:id])
if foo.update_attributes(params[:foo])
end
end
end

Foo.rb
class Foo < ActiveRecord::Base
def validate
logger.debug(self.name == "") # => false
logger.debug(self.name.nil?) # => true
end
end

モデルでは空文字のパラメーターがnilとして保持されています。
データベースにもNULLとして格納されます。(NOT NULLじゃない場合)

empty?blank? を多用してたので気づきませんでした。。。

0 件のコメント: