当你升级rails 3.2 -> 4.0。不通过测试,错误如下:
Failure/Error: post :create, :user => user_params
ActiveRecord::ActiveRecordError:
can not touch on a new record object
这个问题可以解决吗?
describe "POST create" do
def do_post
User.should_receive(:new).with(HashWithIndifferentAccess.new(user_params)).and_return(user)
binding.pry
post :create, :user => user_params
end
let(:profile_params) { {:first_name => "John", :last_name => "Bobson", :country => "US"} }
let(:user_params) { {:vid => "12345", :username => "johnbobson", :email => "john@example.com", :user_profile_attributes => profile_params} }
let(:user) { User.new(user_params) }
context "user" do
subject { do_post; user }
its(:invited_at) { should == Date.today.to_time.utc }
its(:invitation_code) { should_not be_nil }
end
end
使用此方法的原因。
def update_last_active_at
current_user.touch(:last_active_at) if current_user
end
这个错误很可能是因为current_user没有保存在数据库中。Rails不能触及尚未保存的记录。
要验证这一点,只需检查当前用户是否是一个新记录,然后再尝试触摸它。
def update_last_active_at
if !current_user.new_record?
current_user.touch(:last_active_at) if current_user
end
end