2015-01-13 13 views
5

tôi có 2 mô hình, MicrospostUser:thuộc tính Timestamp là nil

class Micropost < ActiveRecord::Base 
    belongs_to :user 
    default_scope -> { order(created_at: :desc) } 
    validates :user_id, presence: true 
    validates :content, presence: true, length: { maximum: 140 } 
end 

class User < ActiveRecord::Base 
    has_many :microposts, dependent: :destroy 
    attr_accessor :remember_token, :activation_token, :reset_token 
    before_save :downcase_email 
    before_create :create_activation_digest 
    validates :name, presence: true, length: { maximum: 50 } 
end 

seed.rb:

User.create!(name: "Example User", 
      email: "[email protected]", 
      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 

# Microposts 
users = User.order(:created_at).take(6) 
50.times do 
    content = Faker::Lorem.sentence(5) 
    users.each { |user| user.microposts.create!(content: content) } 
end 

Nhưng khi tôi sử dụng Faker để tạo Microposts, các created_atupdated_at thuộc tính này là nil trong Rails nhưng KHÔNG trong giao diện điều khiển posgresql. Điều này đã làm tôi bối rối và tôi không biết cách sửa nó. Hơn nữa khi tôi tạo bài đăng theo cách thủ công, thuộc tính created_at không phải là số không. Ai đó có thể cho tôi biết chuyện gì đang diễn ra không?

2.1.5 :016 > m = Micropost.create!(content: "hello", user_id: User.first.id) 
    User Load (0.6ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 
    (0.2ms) BEGIN 
    SQL (0.8ms) INSERT INTO "microposts" ("content", "user_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["content", "hello"], ["user_id", 1], ["created_at", "2015-01-13 08:07:38.584269"], ["updated_at", "2015-01-13 08:07:38.584269"]] 
    (9.6ms) COMMIT 
=> #<Micropost id: 301, content: "hello", user_id: 1, created_at: "2015-01-13 07:07:38", updated_at: "2015-01-13 07:07:38"> 
2.1.5 :017 > m.created_at 
=> Tue, 13 Jan 2015 08:07:38 CET +01:00 

Và tất nhiên ở đây trong bảng điều khiển Posgresql của bạn, bạn có thể thấy micropost thực sự có dấu thời gian.

railsdays_development=# \d+ microposts 
                 Table "public.microposts" 
    Column |   Type    |      Modifiers      | Storage | Stats target | Description 
------------+-----------------------------+---------------------------------------------------------+----------+--------------+------------- 
id   | integer      | not null default nextval('microposts_id_seq'::regclass) | plain |    | 
content | text      |               | extended |    | 
user_id | integer      |               | plain |    | 
created_at | timestamp without time zone | not null            | plain |    | 
updated_at | timestamp without time zone | not null            | plain |    | 
Indexes: 
    "microposts_pkey" PRIMARY KEY, btree (id) 
    "index_microposts_on_user_id" btree (user_id) 
    "index_microposts_on_user_id_and_created_at" btree (user_id, created_at) 
Has OIDs: no 

railsdays_development=# select * from microposts; 
id |          content          | user_id |   created_at   |   updated_at   
-----+-----------------------------------------------------------------------------------+---------+----------------------------+---------------------------- 
    1 | Velit optio magni in modi distinctio.            |  1 | 2015-01-13 06:48:48.212602 | 2015-01-13 06:48:48.212602 
    2 | Velit optio magni in modi distinctio.            |  2 | 2015-01-13 06:48:48.216021 | 2015-01-13 06:48:48.216021 
    3 | Velit optio magni in modi distinctio.            |  3 | 2015-01-13 06:48:48.218617 | 2015-01-13 06:48:48.218617 
    4 | Velit optio magni in modi distinctio.            |  4 | 2015-01-13 06:48:48.221544 | 2015-01-13 06:48:48.221544 
    5 | Velit optio magni in modi distinctio.            |  5 | 2015-01-13 06:48:48.223975 | 2015-01-13 06:48:48.223975 
    6 | Velit optio magni in modi distinctio.            |  6 | 2015-01-13 06:48:48.226611 | 2015-01-13 06:48:48.226611 
    7 | Magni aliquid ut enim sunt aut.             |  1 | 2015-01-13 06:48:48.22897 | 2015-01-13 06:48:48.22897 
    8 | Magni aliquid ut enim sunt aut.             |  2 | 2015-01-13 06:48:48.23096 | 2015-01-13 06:48:48.23096 
    9 | Magni aliquid ut enim sunt aut.             |  3 | 2015-01-13 06:48:48.232889 | 2015-01-13 06:48:48.232889 
    10 | Magni aliquid ut enim sunt aut.             |  4 | 2015-01-13 06:4: 

Micropost được tạo bởi Faker có nil dấu thời gian. Nhưng Microposts tôi tự tạo ra có một dấu thời gian hợp lệ.

này là từ một micropost tạo ra bởi Faker (đầu tiên 300 microposts)

2.1.5 :021 > Micropost.count 
    (0.6ms) SELECT COUNT(*) FROM "microposts" 
=> 301 
2.1.5 :022 > a = Micropost.find(2).created_at 
    Micropost Load (0.6ms) SELECT "microposts".* FROM "microposts" WHERE "microposts"."id" = $1 ORDER BY "microposts"."created_at" DESC LIMIT 1 [["id", 2]] 
=> nil 
2.1.5 :023 > 

_create_microposts.rb:

class CreateMicroposts < ActiveRecord::Migration 
    def change 
    create_table :microposts do |t| 
     t.text :content 
     t.references :user, index: true 

     t.timestamps null: false 
    end 
    add_index :microposts, [:user_id, :created_at] 
    end 
end 
+0

Bạn có thể vui lòng chỉ cho tôi nơi created_at của bạn đang nhận được không? – Ajay

+0

'2.1.5: 021> Micropost.count (0.6ms) CHỌN COUNT (*) TỪ" microposts " => 301 2.1.5: 022> a = Micropost.find (2) .created_at Tải Micropost (0.6ms) CHỌN "microposts". * TỪ "microposts" WHERE "microposts". "Id" = $ 1 ORDER BY "microposts". "Created_at" DESC LIMIT 1 [["id", 2]] => nil 2.1 .5: 023> '@Ajay – Emanuel

+0

dán tệp di chuyển của bạn, hãy di chuyển XXXX_create_microposts.rb? – Ajay

Trả lời

6

Sau khi đào thông qua ứng dụng của bạn, tôi nhận thấy rằng bạn có dòng này trong thư mục config/application.rb:

config.active_record.default_timezone = 'Warsaw'

config.active_record.default_timezone mong muốn hoặc là :utc nếu bạn muốn sử dụng UTC hoặc :local nếu bạn mong đợi nó sử dụng múi giờ được tìm thấy trong config.time_zone. Tại địa phương, khi tôi đặt này để :local, tôi nhận được:

>> Micropost.first 
    Micropost Load (1.0ms) SELECT "microposts".* FROM "microposts" ORDER BY "microposts"."created_at" DESC LIMIT 1 
=> #<Micropost id: 300, content: "Nemo fuga eveniet expedita consequatur.", user_id: 6, created_at: "2015-01-19 22:21:48", updated_at: "2015-01-19 22:21:48", picture: nil> 

Khi thiết lập để :utc, tôi nhận được:

>> Micropost.first 
    Micropost Load (0.6ms) SELECT "microposts".* FROM "microposts" ORDER BY "microposts"."created_at" DESC LIMIT 1 
=> #<Micropost id: 300, content: "Nemo fuga eveniet expedita consequatur.", user_id: 6, created_at: "2015-01-19 16:21:48", updated_at: "2015-01-19 16:21:48", picture: nil> 

Tôi có lẽ sẽ bỏ qua này bản thân mình, nhưng tôi đã đi đào cho các tài liệu do cấu hình "vừa không nhìn đúng ™."

Tài liệu có liên quan có thể được tìm thấy trong section 3.6 of the Rails guide under Configuring Active Record.

Các vấn đề liên quan