'无法触及新的记录对象'规格错误

时间:2014-07-30 09:41:38

标签: ruby-on-rails-4 rspec rspec-rails

升级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

1 个答案:

答案 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