升级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
答案 0 :(得分:2)
该错误最有可能发生,因为current_user尚未保存在数据库中。 Rails无法触及尚未保存的记录。
要验证这一点,只需在尝试触摸之前检查当前用户是否为新记录。
def update_last_active_at
if !current_user.new_record?
current_user.touch(:last_active_at) if current_user
end
end