Invalid date and time; Ruby on the rails

I am running a test with postings in Ruby on Rails and I am getting the following errors:

*********-C02MGBVJFD57:myapp ************$ bundle exec rake test:mailers

# Running:

EE

Finished in 0.110500s, 18.0995 runs/s, 0.0000 assertions/s.

  1) Error:
UserMailerTest#test_account_activation:
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect datetime value: '2014-12-18 01:07:49 UTC' for column 'activated_at' at row 1: INSERT INTO `users` (`name`, `email`, `password_digest`, `admin`, `activated`, `activated_at`, `created_at`, `updated_at`, `id`) VALUES ('Michael Example', 'michael@example.com', '$2a$04$hz6pvZctid6gZEuv0.qAe.0mEfbEjxso9GrXwC3yHRhIThIJ7Vx5m', 1, 1, '2014-12-18 01:07:49 UTC', '2014-12-18 01:07:49', '2014-12-18 01:07:49', 762146111)



  2) Error:
UserMailerTest#test_password_reset:
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect datetime value: '2014-12-18 01:07:49 UTC' for column 'activated_at' at row 1: INSERT INTO `users` (`name`, `email`, `password_digest`, `admin`, `activated`, `activated_at`, `created_at`, `updated_at`, `id`) VALUES ('Michael Example', 'michael@example.com', '$2a$04$XTAWn5P9kikgOXqxQgiJqOjP027p4HnucHZ6pth2aaLwolaFcehsm', 1, 1, '2014-12-18 01:07:49 UTC', '2014-12-18 01:07:49', '2014-12-18 01:07:49', 762146111)


2 runs, 0 assertions, 0 failures, 2 errors, 0 skips

      

When I check the users.yml file of my inventory, I see that I am using the ruby โ€‹โ€‹timezone marker:

michael:
  name: Michael Example
  email: michael@example.com
  password_digest: <%= User.digest('password') %>
  admin: true
  activated: true
  activated_at: <%= Time.zone.now %>

archer:
  name: Sterling Archer
  email: duchess@example.gov
  password_digest: <%= User.digest('password') %>
  activated: true
  activated_at: <%= Time.zone.now %>

lana:
  name: Lana Kane
  email: hands@example.gov
  password_digest: <%= User.digest('password') %>
  activated: true
  activated_at: <%= Time.zone.now %>

mallory:
  name: Mallory Archer
  email: boss@example.gov
  password_digest: <%= User.digest('password') %>
  activated: true
  activated_at: <%= Time.zone.now %>

<% 30.times do |n| %>
user_<%= n %>:
  name:  <%= "User #{n}" %>
  email: <%= "user-#{n}@example.com" %>
  password_digest: <%= User.digest('password') %>
  activated: true
  activated_at: <%= Time.zone.now %>
<% end %>  

      

and my db / seeds.rb file looks like this:

User.create!(name:  "Example User",
             email: "example@railstutorial.org",
             password:              "foobar",
             password_confirmation: "foobar",
             admin: true,
             activated: true,
             activated_at: Time.zone.now)

99.times do |n|
  name  = Faker::Name.name
  email = "example-#{n+1}@railstutorial.org"
  password = "password"
  User.create!(name:  name,
               email: email,
               password:              password,
               password_confirmation: password,
               activated: true,
               activated_at: Time.zone.now)
end

      

EDIT: Here are the tests

test / senders / user_mailer_test.rb:

require 'test_helper'

class UserMailerTest < ActionMailer::TestCase

  test "account_activation" do
    mail = UserMailer.account_activation
    assert_equal "Account activation", mail.subject
    assert_equal ["to@example.org"], mail.to
    assert_equal ["from@example.com"], mail.from
    assert_match "Hi", mail.body.encoded
  end

  test "password_reset" do
    mail = UserMailer.password_reset
    assert_equal "Password reset", mail.subject
    assert_equal ["to@example.org"], mail.to
    assert_equal ["from@example.com"], mail.from
    assert_match "Hi", mail.body.encoded
  end
end

      

Is there something I am doing wrong? Thanks for the help.

+3


source to share


6 answers


Is it activated as a file datetime

in the migration file? You can try Time.zone.now.to_datetime

.



+5


source


or you can just use the fixed created_at time in the fixtures:



created_at: "2015-08-15 20:53:32"

      

+1


source


I am using MySQL 5.7.10. I was having similar issues when trying to insert records directly into a table using ModelName.connection.execute (SQL statement) including the created_at and updated_at marks.

Here's what worked for me:

'#{DateTime.now.strftime('%F %T')}'

      

Be sure to include the surrounding single quotes.

+1


source


I suspect your column is of type 'datetime'. Use 'DateTime.now.in_time_zone' instead of 'Time.zone.now'

0


source


I have the same errors. But I updated the datetime

part with the help Timezone.now.to_datetime

in the seeds.rb and users.yml files and then ran:

$ bundle exec rake db:migrate:reset
$ bundle exec rake db:seed

      

and then run

$ bundle exec rake test

      

You're supposed to get ALL GREEN.

0


source


ActiveRecord :: Base.sanitize will take Ruby Time object and convert correctly to specified sql value

ActiveRecord::Base.sanitize(DateTime.now)
=> "'2016-11-15 09:47:54'"

      

0


source







All Articles