由于updated_at列在更新时查看所有属性,我想添加一个new_updated_at,我将在更新时决定.
通过迁移插入时的默认值我希望它是当前的updated_at.
如何将迁移的默认值设置为同一行但另一列的值?
postgresql ruby-on-rails default-value rails-migrations ruby-on-rails-3
$ rails generate migration add_password_digest_to_users password_digest:string
Run Code Online (Sandbox Code Playgroud)
必须向用户添加password_digest,但rails生成命令不起作用。它只是假装有效,但似乎会永远持续下去。没有返回错误或回溯,只是换行。
我最近开始注意到在部署到生产之后,我在db/schema.rb那里看到了这个git diff :
- t.boolean "published", limit: 1
+ t.boolean "published"
Run Code Online (Sandbox Code Playgroud)
和
- t.boolean "visible", limit: 1, default: false
+ t.boolean "visible", default: false
Run Code Online (Sandbox Code Playgroud)
鉴于Rails版本在两种环境中都是相同的,这是否仅仅是由MySQL版本之间的差异造成的,分别是5.5.43的生产和5.6.23的开发?
迁移数据库时,我犯了一个拼写错误。
我想通过运行生成一个脚手架:
rails generate scaffold Micropost context:text user_id:integer
rails db:migrate
Run Code Online (Sandbox Code Playgroud)
尽管我在运行时遗漏了冒号,但犯了一个错误:
rails generate scaffold Micropost context:text user_id integer
rails db:migrate
Run Code Online (Sandbox Code Playgroud)
我想撤消这次迁移,该怎么做?(我正在使用 Rails 5.0.0.1)
当我运行时rails db:migrate,我收到以下错误:
SQLite3::SQLException: table "microposts" already exists:
Run Code Online (Sandbox Code Playgroud)
当我运行时rails db:migrate:status,我得到以下输出:
Status Migration ID Migration Name
up 20161024021157 Create users
up 20161024025545 ********** NO FILE **********
down 20161024025805 Create microposts
Run Code Online (Sandbox Code Playgroud)
我尝试使用rails db:migrate:down VERSION=20161024025805. 命令行中没有显示任何消息。然后我就跑了rails db:migrate。错误是一样的。
这是我的创建表迁移。请注意,我没有提供price.
class CreateProducts < ActiveRecord::Migration[5.0]
def change
create_table :products do |t|
t.string :name
t.decimal :price, precision: 8, scale: 2
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在我想设置一个默认值。根据迁移指南,我应该提供from使其可逆。我应该提供什么价值?
class ChangeProductsPriceDefault < ActiveRecord::Migration[5.0]
def change
change_column_default :products, :price, from: 'WHAT_TO_WRITE_HERE?', to: 0
end
end
Run Code Online (Sandbox Code Playgroud) 在 Rails 中向现有列添加索引时:
add_index :users, :some_id
Run Code Online (Sandbox Code Playgroud)
然后运行迁移:
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
是否所有预先存在的记录/列都自动索引?使用的数据库是 Postgres。
有没有办法在db/migrate文件夹中组织迁移文件?
因为你在这个文件夹中很快就有大量的迁移文件,所以有这样的东西会很棒:
db/migrate/user_migrations/
timestamp_create_users.rbtimestamp_create_addresses.rb等等...
有一个简单的方法吗?某种配置?这是一种不好的做法,我绝对不应该这样做吗?
如果有人有任何关于此的信息,我会很高兴听到!
我正在尝试实施"评论"功能,作为我正在建设的项目的一部分.
在本课程的早些时候,我们创建了一个评论表,并让Faker gem生成虚假评论.
我的说明如下:
注释必须与用户关联,因此将user_id外键添加到comments表中.记得也要添加一个索引;
更新用户模型,以便您可以调用user.comments和Comment模型,以便您可以调用comment.user;
运行db:reset时,修改seeds.rb文件以创建有效注释;
最初我试图运行我的rails generate命令,但一直遇到这个错误:
? rake db:migrate
== 20150508143445 CreateComments: migrating ===================================
-- create_table(:comments)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: table "comments" already exists: CREATE TABLE "comments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "description" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) /Users/jon/code/bloccit/db/migrate/20150508143445_create_comments.rb:3:in `change'
-e:1:in `<main>'
ActiveRecord::StatementInvalid: SQLite3::SQLException: table "comments" already exists: CREATE TABLE "comments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "description" text, "created_at" …Run Code Online (Sandbox Code Playgroud) 我有一个表'Invoices',其中包含两个布尔列:
Table name: invoices
id :integer not null, primary key
...
sent :boolean default(FALSE)
payment_received :boolean default(FALSE)
Run Code Online (Sandbox Code Playgroud)
这两列定义了发票的状态:
def status
if sent & payment_received
:paid
elsif sent | payment_received
:sent
else
:created
end
end
Run Code Online (Sandbox Code Playgroud)
有一天,我们决定删除这些布尔列,并在Rails枚举的帮助下创建包含发票状态的新列
status :integer
enum status: [ :created, :sent, :paid ]
Run Code Online (Sandbox Code Playgroud)
所以现在我需要做三件事:
我怎样才能做到这一点?我可以在我的本地环境中轻松完成此任务,但我无法理解如何在生产服务器上执行此操作.例如,如果我将创建一个更新我的表的迁移和一个计算状态的rake任务,则迁移首先传递,我的数据将从布尔列中移除,然后才能使用它们.
注意:如果它以某种方式重要:我使用Postgres.
任何帮助表示赞赏!
我正在使用Rails 5,并且已经安装了gem并尝试运行迁移,但是却出现此错误:
Index name 'index_rates_on_rater_id' on table 'rates' already exists
有人知道为什么会这样吗?这是一个新站点,并且刚刚开始添加devise gem。
这是在执行时无法完成的迁移文件 rails db:migrate
class CreateRates < ActiveRecord::Migration[5.1]
def self.up
create_table :rates do |t|
t.belongs_to :rater
t.belongs_to :rateable, :polymorphic => true
t.float :stars, :null => false
t.string :dimension
t.timestamps
end
add_index :rates, :rater_id
add_index :rates, [:rateable_id, :rateable_type]
end
def self.down
drop_table :rates
end
end
Run Code Online (Sandbox Code Playgroud) 我想使用 Rails 迁移添加新表:
**table_name** users_location_track
**columns** id (primary key, auto increment serial),
user_id (reference to users), location_info (string),
creation_time(time-stamp)
Run Code Online (Sandbox Code Playgroud)
请建议程序和代码 我是 Rails 新手?
rails-migrations ×11
ruby-on-rails ×10
ruby ×4
postgresql ×3
activerecord ×2
mysql ×2
directory ×1
git ×1
ruby-1.8.7 ×1