Rails不包括时间戳,即使我特别要求它们

时间:2015-07-30 07:50:30

标签: ruby-on-rails ruby

我目前遇到RoR问题。我需要在表格中创建字段created_at和updated_at以供进一步使用。然而,即使我问过rails,rails似乎也没有添加它们。这些是我的模特:

Picture.rb
class Picture < ActiveRecord::Base
    belongs_to :category
    has_many :comments, dependent: :destroy
    mount_uploader :photo, PhotoUploader
    validates_presence_of :photo
end    

Category.rb    
class Category < ActiveRecord::Base
    has_many :pictures, dependent: :destroy
    validates :name, presence: true, uniqueness: { case_sensitive: false }
end    

Comment.rb
class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :picture

  validates :text, presence: true
end

这些是我的迁移:

class CreateCategories < ActiveRecord::Migration
  def change
    create_table :categories do |t|
      t.string :name
      t.timestamps
    end
  end
end

class CreatePictures < ActiveRecord::Migration
  def change
    create_table :pictures do |t|
      t.string :description
      t.references :category, index: true
      t.timestamps
    end
    add_foreign_key :pictures, :categories
  end
end

class AddPhotoToPictures < ActiveRecord::Migration
  def change
    add_column :pictures, :photo, :string
  end
end


class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.string :text
      t.references :user, index: true
      t.references :picture, index: true

      t.timestamps
    end
    add_foreign_key :comments, :users
    add_foreign_key :comments, :pictures
  end
end

class AddTimeStampsToPicture < ActiveRecord::Migration
  def change_table
    change_table :pictures do |t|
    t.timestamps
    end
end  

正如您所看到的,我正在尝试添加2列。当我尝试查看created_at字段时,它会说"undefined method created_at'"。我正在检查rails c以查看字段是否存在但不存在,字段不存在。我正在使用PG gem。我也使用carrierwave gem上传图片。为什么rails不包含这两列?这是项目本身的 link 正如coorasse建议我看一下架构。

create_table "pictures", force: :cascade do |t|
    t.string   "description"
    t.integer  "category_id"
    t.string   "photo_file_name"
    t.string   "photo_content_type"
    t.integer  "photo_file_size"
    t.datetime "photo_updated_at"
    t.string   "photo"
  end  

似乎它没有更新自己。为什么呢?

2 个答案:

答案 0 :(得分:2)

要强制更新shema,您可以删除数据库并重新创建它。

但请注意 - 它会清除整个数据库。

GetDataResponse

您不能只编辑架构或迁移文件。如果要添加新列 - 您应该通过新迁移来完成。

但是如果您正在编辑迁移文件,那么您将有(问题)删除数据库并重新创建它。

答案 1 :(得分:0)

检查您是否使用rake db:migrate运行迁移,然后仔细检查schema.rb文件。

您必须运行迁移才能使更改生效