Tag: migration

如何使用迁移文件向Rails中的表中的列添加数据库级别唯一约束?

如何使用其迁移向Rails中的表中的列添加数据库级别唯一约束? 我用谷歌搜索,但这些答案似乎涉及索引,我不想触摸索引,因为我不确定它是否会产生不良副作用(因为stackoverflow.com/a/3370333/6359753有评论说它会有存储影响)。 我必须拥有它并且会产生不良副作用吗? 这就是为什么即使我已经阅读了一个迁移来为列的组合添加唯一约束但仍然在问这个问题。

在rails迁移中设置不同的默认值?

我正在尝试编写迁移,它看起来像这样: class AddStatusToWorks < ActiveRecord::Migration def self.up change_table :works do |t| t.string :status end end def self.down change_table :works do |t| t.remove :status end end end 事实是,我想根据已经在表中的布尔值“完成”为“状态”设置不同的默认值。 如果complete = true,则status =“complete”。 如果没有,status =“正在进行中”。 (之所以我想要一个字符串而不是保持完整的布尔值是因为我希望能够为状态提供两个以上的可能性。)任何想法如何做到这一点? 我只是像这样坚持if语句 change_table :works do |t| t.string :status if (:complete == true) :value => “complete” else :value => “wip” end 呃,所以看起来不太对劲。 我google了一下,发现你可以设置:默认值,但这不是我想要的。 […]

Rails form_for NoMethodError

我试图在rails应用程序中使用erb生成表单。 我不断得到我的.html.erb文件第3行的NoMethodError。 下面是迁移,控制器,模型和.html.erb 错误是“未定义的方法`class_projects_path’” 移民: class CreateClassProjects < ActiveRecord::Migration def change create_table :class_projects do |t| t.string :name t.text :description t.text :summary t.text :github t.text :other_url t.timestamps end end end 模型: class ClassProject < ActiveRecord::Base attr_accessible :description, :github, :name, :other_url, :summary end 控制器: class ClassProjectsController < ApplicationController def new @class_project = ClassProject.new end end new.html.erb: New […]

为什么Rails Active Record迁移会在mysql的varchar列上生成COLLATE utf8_bin

我在导轨上运行jruby for rails 3.0.10。 我发现在某个varchar列上以某种方式激活记录迁移会生成COLLATE utf8_bin。 当我做一个show create table用户时: CREATE TABLE `users` ( `id` int(11) not null AUTO_INCREMENT default NULL, `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin not null default ”, `remember_created_at` datetime, `sign_in_count` int(11) default 0, `current_sign_in_at` datetime, `last_sign_in_at` datetime, `current_sign_in_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin default NULL, …. 任何人都知道为什么以及如何关闭它?

Rails为数据库中的现有字段获取未定义的方法

所以我在问题表中有一个字段,名为is_public ..我迁移了我的数据库,重新启动它,现在当我每次在问题记录中调用is_public记录时都会收到此错误。 undefined method `is_public’ for # 任何想法为什么会发生这种情况?

rake db:migrate没有检测到新的迁移?

有经验的Rails / ActiveRecord 2.1.1 您创建了第一个版本(例如)ruby脚本\生成脚手架产品标题:字符串描述:text image_url:string 这创建(例如)名为20080910122415_create_products.rb的迁移文件 您可以使用rake db:migrate应用迁移 现在,使用ruby脚本生成一个字段到产品表\ generate migration add_price_to_product price:decimal 这将创建一个名为20080910125745_add_price_to_product.rb的迁移文件 如果您尝试运行rake db:migrate,它实际上将恢复第一次迁移,而不是应用下一次迁移! 所以你的产品表会被破坏! 但是,如果你单独使用rake,它会告诉你一个迁移正在等待 请注意,应用rake db:migrate(一旦表被销毁)将按顺序应用所有迁移。 我找到的唯一解决方法是指定新迁移的版本,如: rake db:migrate version=20080910125745 所以我想知道:这是一个预期的新行为吗?

Rails:’references:foo’和’integer:foo_id’之间有区别吗?

当我在迁移中使用references :foo时,生成的列称为foo_id 。 做references :foo之间是否有任何区别references :foo和只做integer :foo_id ? 也许在幕后发生了一些事情来强制执行数据库级别的关系?

我应该联合索引ActiveRecord多态关联吗?

我有一个我希望非常大的度量表。 它具有多态关联,因此它可以属于想要记录某些度量的其他模型。 我通常索引像这样的关联列来加速关联加载。 我听说有人在谈论联合索引这种关联 。 这看起来像: add_index :comments, [:commentable_type, :commentable_id] 但我也听到过反对创建低基数指数的建议 ,因为指数的收益并没有抵消维持指数的开销。 由于我的多态关联的_type一半可能在数百万行中只有4-5个值,所以我倾向于只对多态关联的_id部分进行索引。 我可能会使用_id列和一些其他未提及的整数和日期时间列创建一些额外的联合索引,但我也不会在这些索引中包含_type。 这是你会做/推荐的吗?

activerecord迁移中序列化列的默认值

所以我有一个序列化列:维度,在我的迁移中,我想将字段设置为默认哈希。 我试过了… create_table :shipping_profiles do |t| t.string :dimensions_in, :default => {:width => 0, :height => 0, :depth => 0} 只是 t.string :dimensions_in, :default => Hash.new() 但是这些字段最终为空。 如何在创建时为此字段设置默认的序列化对象,或者至少确保我的serialize属性始终是哈希?

将db / schema.rb放到.gitignore列表中是个好主意吗?

所以我在工作中建议的是将db / schema.rb放入.gitignore文件,因此我们没有(不时)合并问题。 有些人担心,如果发生了可怕的事情(meteor在数据库服务器上从天而降,同时所有db / migrete文件都已损坏),我们可能会松开架构,我们将不得不使用rake db:purge(重用) schema.rb)。 我同意这是可能的,这是一个很好的论点,但它不应该是问题,因为每次我们进行rake db:migrate时都会生成db / schema.rb。 因此,即使我们不在服务器上推送schema.rb,我们也在推动迁移添加运行db:migrate每次我们使用数据库更改进行部署时,db:migrate rails将在服务器端自动生成schema.rb,并且schema.rb在服务器上保持不变,直到我们执行另一个db:migrate。 那么你的意见是什么,我们是否应该将db / schema.rb放入git ignore? 谢谢