Tag: rails migrations

模型中的更改未保存。 Rails 4.1

我刚刚使用脚手架创建了一个用户模型,如下所示: rails g scaffold user name:string 我运行db:migrate并且一切正常,但是当我尝试添加新字段时,它不会将其保存在数据库中。 我通过这样做来添加字段: rails g migration add_surname_to_users surname:string 当我运行rake db:migrate时,没有奇怪的消息,数据库表没问题,表单已被编辑为alow surname输入,因为它有show和index视图来正确显示它。 但是,它不会保存给予数据库的表单值。 关于如何解决它的任何线索? 不能改变我的模型真烦人。

为Rails 4 / Postgres重新排序schema.rb中的列是否安全?

在开发和生产中使用Postgres 9.4运行Rails 4。 我有一张随着时间的推移而逐渐迁移的大桌子。 由于表中有许多不同的列,我想重新排序,以便更加逻辑地对列进行分组。 换句话说,一些列元素基于它们捕获的信息自然地组合在一起。 我发现了有关使用after:的讨论after:在迁移中重新排序列(在SQL中使用ALTER TABLE ),在此堆栈溢出讨论中 。 然后我继续设置迁移来做到这一点。 运行迁移后,我注意到我的schema.rb文件没有更改。 查看数据库中的列(开发后的postgres),也没有任何改变。 进一步的研究使我进入了Postgres维基 ,该维基表示目前不支持改变Postgres的柱位。 这不是关键任务,但它会让生活更轻松。 我的问题是: 如果我只是向上或向下移动schema.rb文件中的行以便根据需要定位它们,那会导致任何问题吗? 因为我希望使用rake db:schema:load来配置任何新数据库,所以看起来不应该破坏任何东西。 此外,由于先前的迁移没有实质性地改变(只是它们输出到schema.rb的列的顺序),一切都应该是内部一致的,不是吗? 如果这是一个坏主意,我可以简单地回到早期的迁移,将after: :some_column的语法添加到每个列元素,以便它们正确设置schema.rb文件吗? 我的假设是,当我从头开始使用种子数据重建我的生产数据库时,它将使用模式结构以所需顺序正确创建表。 现在它不是一个真正的,部署了最终用户的数据库,所以它似乎不是一个问题。 使用上面的选项#1似乎是最简单的解决方案,只要它不会破坏任何东西。

Rails迁移更改顺序或顺序

我为Rails 3应用程序编写了一些迁移,但我想更改迁移的顺序。 如何更改迁移顺序或顺序? 是否像使用似乎是时间戳的重命名迁移文件一样简单? 我知道这是一个奇怪的问题,但基本上,我弄乱了我的迁移并删除了一些旧的迁移,现在我需要在创建一个新的表之前删除一个表。 我也知道我可以在create-the-new-table迁移中包含drop语句,但我很想知道如何重新排序迁移。

Rails 4 MySQL bigInt主键问题和错误

我需要在rails 4.1.8应用程序中使用14位bigInt作为主键。 使用SO上的旧post作为指导,我想出了以下内容来解决这个问题…… class CreateAcctTransactions false do |t| t.integer :id, :limit => 8,null: false t.integer “account_id”,limit: 8,null: false t.integer “transaction_type_id”, null: false t.datetime “date”,null: false t.text “description”,limit: 255 t.decimal “amount”,precision: 10, scale: 2, null: false end end end 但是,这种方法并没有真正将“id”指定为主键 ,它只是另一个普通字段。 此外,当我收到以下错误时…… Mysql2 ::错误:字段’id’没有默认值:INSERT INTO acct_transactions ( account_id , amount , date , description , transaction_type_id […]

Rails引擎在外键中出现问题

我正在开发一个rails引擎,这是我的gem.gemspec s.required_ruby_version = ‘>= 2.0.0’ s.add_dependency ‘rails’, ‘>= 4.2.0’ s.add_dependency ‘enumerate_it’ s.add_dependency ‘slim-rails’ s.add_dependency ‘bootstrap-sass’ s.add_dependency ‘jquery-rails’ s.add_development_dependency ‘rdoc’ s.add_development_dependency ‘tomdoc’ s.add_development_dependency ‘sqlite3’ s.add_development_dependency ‘rspec-rails’ s.add_development_dependency ‘timecop’ s.add_development_dependency ‘shoulda-matchers’ s.add_development_dependency ‘factory_girl_rails’ s.add_development_dependency ‘database_cleaner’ s.add_development_dependency ‘awesome_print’ s.add_development_dependency ‘guard’ s.add_development_dependency ‘guard-rspec’ s.add_development_dependency ‘guard-migrate’ s.add_development_dependency ‘guard-livereload’ s.add_development_dependency ‘thor’ s.add_development_dependency ‘simplecov’ s.add_development_dependency ‘codeclimate-test-reporter’ 这是我的迁移文件,当我运行install命令时,它将被复制到我的rails应用程序: class CreateMpaStorySchema < ActiveRecord::Migration def […]

rails migration:postgresql for md5 of random string as default

Rails 3 + postgresql 我希望有一个随机字符串的sha用于列的默认值。 所以,在我的迁移中,我有: t.string :uniqueid, default: md5(random()::text) 然而,我无法让它实际产生任何东西,我使用了反引号,引号等。 从我看过的例子来看,似乎pg函数只能在SELECT语句中使用。 这是准确的吗? 有关如何实现这一目标的任何想法? 谢谢

Rails和MySQL语法错误与执行块中的多个SQL语句

对于使用MySQL的应用程序,我在Rails迁移中有以下代码: execute <<-SQL ALTER TABLE properties ADD name VARCHAR(255) NOT NULL; ALTER TABLE properties ADD CONSTRAINT fk_properties_name FOREIGN KEY (name) REFERENCES valid_property_names (property_name); SQL 当我运行迁移时,我收到以下错误: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ALTER TABLE properties 为什么我会收到此错误,如何解决?

创建schema_migrations的Rails – Mysql2 ::错误:指定的键太长了

我正在使用Rails 3.2.6和Mysql 6.0.9(但我在MySQL 5.2.25上有完全相同的错误) 当我创建新数据库( rake db:create )然后当我尝试加载模式( rake schema:load )时,我收到此错误: Mysql2::Error: Specified key was too long; max key length is 767 bytes: CREATE UNIQUE INDEX `unique_schema_migrations` ON `schema_migrations` (`version`) 经过数小时和数小时的研究,我发现了以下解决方 1.将MySQL变量innodb_large_prefix更改为true(或ON) 这没用。 我在我的Linux服务器,我的Mac甚至Windows上试过它 – 它只是不起作用。 2. Monkeypatch ActiveRecord :: SchemaMigration.create_table 我不需要version列长度​​为255(当它是UTF-8时,它需要4 * 255 = 1020字节并且超过了密钥的767字节的MySQL限制)。 我也不需要它是UTF-8,但DB中的所有其他表都是UTF-8,我已将utf8_czech_ci设置为默认排序规则。 实际创建schema_migrations表的方法如下所示: def self.create_table unless connection.table_exists?(table_name) connection.create_table(table_name, :id => […]

rake db:migrate不起作用(Rails 4.0.4)

我在Rails 4.0.4 / Ruby 2.1.0上有一个新的应用程序。 我做的第一件事就是添加Devise gem。 当我想运行rake db:migrate时,它什么都不做。 没有错误,但是没有执行迁移。 你能帮我解决一下这个案子怎么办? 我找不到问题出在哪里。 谢谢! 切赫

如何使用不同的表名在rails迁移中添加外键

如何通过添加外键来指定不同的表名。 例如 我有一个像这样的模特 class MyPost < ActiveRecord::Base has_many :comments, class_name: PostComment end class PostComment < ActiveRecord::Base belongs_to :post, class_name: MyPost end 现在我想改变我的迁移文件,如下所示: class CreatePostComments MyPost end end 但它没有用。 迁移正在取消。 如何更改我的迁移文件以使用我的模型结构。