我目前遇到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
似乎它没有更新自己。为什么呢?
答案 0 :(得分:2)
要强制更新shema,您可以删除数据库并重新创建它。
但请注意 - 它会清除整个数据库。
GetDataResponse
您不能只编辑架构或迁移文件。如果要添加新列 - 您应该通过新迁移来完成。
但是如果您正在编辑迁移文件,那么您将有(问题)删除数据库并重新创建它。
答案 1 :(得分:0)
检查您是否使用rake db:migrate
运行迁移,然后仔细检查schema.rb
文件。
您必须运行迁移才能使更改生效