RailsでVirtual Attributes(仮想的な属性)をするでハマりました。
いつもお世話になっているこのサイトを参考に作成したのですが、、
def set_name self.name = [@last_name, @first_name].join(" ") end
ここの部分が問題です。
saveやupdateをcontrollerやmodelで使う際に、必ずlast_nameやfirst_nameのparamsが送られてくれば問題ないのです。
しかし、仮にuserがpasswordカラムを持っていて、passwordを使ってログイン、その際にログイン情報を作成するためにuser.saveなどをするとvalidationエラーに引っかかります。
set_name内の@last_name,と@first_nameになにもsetされていないので""
がself.nameに代入されます。
この状態でbefore_validationコールバックでset_nameメソッドを呼び出すと,saveやupdate時に毎回nameに""
が代入されて,validationエラーを引き起こします。
そのため、last_nameとfirst_nameになにも代入されていない時は自身を返すように修正しました。
def set_name if @last_name.blank? && @first_name.blank? name else self.name = [@last_name, @first_name].join(" ") end end
これで1時間くらいはまりました。。。
コメントを残す