最近我从django开发转换为全时轨道工作,这是一个相当小的商店,我正在从书本中随手拿起东西.
上周,当我了解到rails的模型没有镜像数据库中的内容时,我的心理模型受到重创.
请参阅差异示例:http://www.peterkrantz.com/2009/rails-grails-django-models/
我很好奇的是,我如何不断修改模型以支持新的数据类型和关系?
另外,有没有办法在模型文件中显示特定类的表中的所有属性?
谢谢
我是新来的Rails,我试图找出如果rake db:create和rake db:migrate是幂等.
换句话说,我可以反复对我的DB(postgres或mysql)运行这两个命令而不会导致问题吗?
我们的想法是自动化Rails部署,并在每次部署Rails应用程序时运行这些命令.我想确保它不会以某种方式弄乱数据库.
任何其他关于rake db迁移的幂等性的问题都非常受欢迎.
我创建了以下Active Record Migration,它添加和删除了一些索引.
class FixIndexes < ActiveRecord::Migration
def change
add_index :table1, :field1, :unique => true
remove_index :table2, :name => "index_table2_on_field1"
remove_index :table2, :name => "index_table2_on_field2"
remove_index :table3, :name => "index_table3_on_field1"
add_index :table3, [:field1, :field2]
end
end
Run Code Online (Sandbox Code Playgroud)
当我运行migration($ bundle exec rake db:migrate)时,它按预期正常工作.
不幸的是,当我尝试恢复迁移($ bundle exec rake db:rollback)时,它不起作用并引发ActiveRecord::IrreversibleMigration异常
== FixIndexes: reverting =====================================================
rake aborted!
An error has occurred, all later migrations canceled:
ActiveRecord::IrreversibleMigration/usr/local/rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.14/lib/active_record/migration/command_recorder.rb:42:in `block in inverse'
/usr/local/rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.14/lib/active_record/migration/command_recorder.rb:40:in `map'
Run Code Online (Sandbox Code Playgroud)
我的问题是:
def self.up而def self.down …mysql activerecord ruby-on-rails rails-migrations ruby-on-rails-3
所以我犯了从我的项目中手动删除迁移文件的愚蠢错误。
他们还在露面db:migrate:status,但我不能够rollback或者destroy他们没有与MigrationID_somename创建新的空文件,然后运行摧毁这些占位符文件。
有没有更好的方法来忘记丢失的迁移文件?
me$ rake db:migrate:status
database: [...]/db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
up 20141203044050 ********** NO FILE **********
up 20141203044501 ********** NO FILE **********
me$ rake db:migrate:down VERSION=20141203044501
rake aborted!
ActiveRecord::UnknownMigrationVersionError:
No migration with version number 20141203044501
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.6/lib/active_record/migration.rb:932:in `run'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.6/lib/active_record/migration.rb:818:in `run'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.6/lib/active_record/railties/databases.rake:79:in `block (3 levels) in <top (required)>'
Tasks: TOP => db:migrate:down
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud) 我对rails非常陌生.我正在尝试在Rails中建立与另一个模型的关联.
我有一个带有列的用户模型:id,user_name,email
现在我正在尝试创建另一个与用户模型关联的模型Expense.此模型的目的是创建费用并将费用与来自同一模型用户的两个不同用户相关联.与第二个用户的关联是在两个用户之间拆分金额.
这是我打算在创建模型费用时要做的事情:
$ rails generate model Expense amount:decimal user:references split_with:references
Run Code Online (Sandbox Code Playgroud)
现在我如何将split_with与User模型相关联,因为两个引用都关联到同一个User模型的两个用户的id?
我需要将一些数据从旧网站迁移到新的 Rails 网站。我需要保留我的城市 ID,因此我创建了表,并将 id 设置为 false 并手动创建该列:
create_table "cities", id: false, force: true do |t|
t.integer "id", null: false
t.string "name", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.boolean "is_active", default: true, null: false
t.string "code_che"
end
add_index "cities", ["id"], name: "index_cities_on_id", unique: true, using: :btree
Run Code Online (Sandbox Code Playgroud)
完成迁移后,我希望能够创建新城市,例如 City.create(name: 'My big city') 但出现下一个错误:
ActiveRecord::StatementInvalid: PG::NotNullViolation: ERROR: null value in column "id" violates not-null constraint
Run Code Online (Sandbox Code Playgroud)
显然我犯了一个错误,你能帮我找出哪里吗?我正在使用 Rails 4 和 postgresql gem。
谢谢。
在我的development/feature分支上,我有一个提交20150818113106_add_team_id_to_account.rb(将一列添加到Account)&schema.rb应用迁移的结果。此提交已被推送,& 也存在于origin/development/feature.
现在我想恢复此更改 -Account毕竟我不想添加此列。我不知道我是否应该因此恢复 git 提交,或者运行db:migrate:down& 提交结果,或者两者兼而有之。
我需要将现有模型的 id 更改为 uuid。我正在使用本指南:
http://rny.io/rails/postgresql/2013/07/27/use-uuids-in-rails-4-with-postgresql.html
但不知道如何使下面的迁移适应变化(而不是创建新的迁移):
class CreateDocuments < ActiveRecord::Migration
def change
create_table :documents, id: :uuid do |t|
t.string :title
t.string :author
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud) 我有 10 多个不同的 Ruby on Rails 应用程序,我必须在其中部署相同的代码。我已将 git repo 连接到我的 Heroku 应用程序,因此每当我推送新更改时,它都会在所有应用程序上部署。
问题在于数据库迁移步骤。我想在每次部署后自动运行迁移。自定义构建包都不起作用。有人可以帮帮我吗?我正在使用 rails 4 和狂欢。
到目前为止,我已经尝试过:
此解决方案不起作用。
是否有其他解决方案可以在 Heroku 上自动运行 Rails 迁移?
我的一个迁移文件正在引用另一个表/模型,该表/模型将在迁移序列中进一步创建。
Postgres 不喜欢这样:
PG::UndefinedTable:错误:关系“用户”不存在
所以我想知道手动重新排序迁移文件(通过发明新的时间戳/前缀)是否存在任何潜在问题?
受影响的表已经向下迁移。
rails-migrations ×10
postgresql ×2
ruby ×2
activerecord ×1
git ×1
heroku ×1
migration ×1
mysql ×1
rails-models ×1
rake ×1
uuid ×1