Tag: 主键

在Rails应用程序中创建自定义主键

在我使用Oracle数据库(版本11g)的Rails应用程序中,我需要主键是String ,而不是Integer 。 例如,在我的Product型号中,我需要主键,如”p001″ , “p002″等。

Rails中的set_primary_key错误

我正在创建一个名为Index的表。 这是迁移: class CreateIndices false} do |t| t.string :name t.float :returns, array: true, default: [] t.float :navs, array: true, default: [] t.float :sharpe t.timestamps end execute “ALTER TABLE indices ADD PRIMARY KEY (name);” end end 一切正常。 我在另一个Stack Overflow问题中看到,我必须在我的模型中包含set_primary_key命令才能使它工作,所以我在index.rb中有以下内容 class Index < ActiveRecord::Base set_primary_key :name end 除了这两个文件之外,我没有更改默认的Rails脚手架(该应用程序是使用Postgres创建的默认数据库)。 当我转到localhost:3000/indices ,我收到以下错误 undefined method `set_primary_key’ for # 如果我注释掉set_primary_key行,它会加载常规的空脚手架,但我认为这并没有给我我想要的主键function。 我究竟做错了什么?

Rails建模:将HABTM转换为has_many:through

我正在现有的Rails站点上进行维护工作,并且遇到了来自多对多关联的一些问题。 看起来该站点最初是使用has_and_belongs_to_many为几个关系构建的,这些关系后来在业务逻辑中变得更加复杂,所以我需要使用has_many :through来支持关系表中的其他字段。 但是,最初用于HABTM的连接表没有主键,我必须添加一个以支持使用has_many :through单独的关系建模。 将主键添加到包含大量数据的现有表的最佳方法是什么? 还有另一种方法可以做我想做的事吗? 顺便提一下,系统在Oracle上运行。 谢谢! 贾斯汀 更新11/9/09 3:58 pm:我不是Oracle的专家,并且在Oracle的非空,自动增量等版本中迷失了方向。 最初我尝试通过添加新字段作为主键来执行Mike和Corey所建议的操作,但Oracle不允许我将非空字段添加到非空表(ORA-01758)。 然后我将数据导出为SQL,删除行,添加PK并将其设置为非null,然后尝试导入数据,但我不断收到“无法将NULL插入id …”的错误。 (ORA-01400)。 最后,我尝试使用迁移,正如Corey在他的评论中所建议的那样,但是当我手动更改数据库时,rake遇到了Oracle抛出的相同错误(“无法将非空字段添加到非空表”)。 我清理了表,运行了迁移(工作),然后尝试重新导入数据,但是上次我尝试导入时遇到了相同的错误(“无法将NULL插入id …”)。 如何保存数据并添加我需要的主键? 我知道有可能写一个rake任务,但我不确定如何继续前进。 有任何想法吗?

为什么Rails 5将“索引”改为“外键”?

如果你在Rails 4中有这个: t.references :event, index: true 现在你可以在Rails 5中使用foreign_key而不是index 。我不太明白为什么他们决定这样做,因为function保持不变,你要添加的是INDEX,而不是该列的FOREIGN KEY。

如何在Rails中管理非自动增量主键?

我有很多情况,我希望在使用Rails时有一个非自动增量主键。 示例:我在A和B之间有一对一的关系.B描述了添加到A的一些特定function,因此在没有A的情况下不能存在。所以我们有: A有一个B. B属于A. 自然的想法是将B.A_id作为主键。 所以我在迁移中尝试了create_table b, :id=>false ,在B的模型中set_primary_key :a_id ,但它没有在数据库中创建实际的主键。 我想要它们(以及外键),因为数据库不仅会被这个Rails应用程序使用。 如果我用执行创建主键,它们不会落在schema.rb中,这会受到伤害。 现在我正在考虑一种解决方法:只要对该列有唯一约束,我就可以没有PK约束,所以我可以在迁移中使用Rails的add_index,这似乎更优雅。 有什么建议?

rails中的多列主键

我正在尝试将桌面应用程序迁移到rails(也处理相当老式的现有数据库)。 问题是我在一列中没有唯一的ID,但它是表的三列,保证了记录的唯一性。 鉴于我有三个表: authors author_name, author_letter, author_nr1, author_nr2 … titles titel_nr, titel_name, … author_titles titel_nr, author_letter, author_nr1, author_nr2 作者的“主键”包括author_letter,author_nr1,author_nr2 here。 那么我需要一种多列主键来使rails关联工作吗? 或者我在这方向走错了方向?

在Ruby on Rails中自动增加非主键字段

在RoR迁移中,如何自动增加非主键字段? 我想在db定义中执行此操作,而不是在模型中执行此操作。

rails非整数主键

我有一张名为Contracts的表。 它当前的默认主键是Rails自动生成的:id字段,它是一个整数。 我希望有一个名为contractId的字段,它是一个字符串类型,并将其用作主键。 我想知道的是: 这是最佳做法吗? 这样做有什么潜在的问题吗? 我该怎么做呢

使用rake db:migrate命令和mysql在Rails中创建表的PRIMARY KEY问题

我的rails版本是4.0.0,我的mysql版本是Ver 14.14 Distrib 5.7.9,适用于Win64(x86_64)。 我正在运行一个旧版本的rails,因为我正在根据我之前的问题获得与mysql的一些冲突。 (查看Kalelc批准的回答我的追索权) 跑步时 rake db:migrate 我收到以下错误 == CreateUsers: migrating ==================================================== — create_table(:users) rake aborted! StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead: CREATE TABLE `users` (`id` int(11) DEFAULT NULL […]

rails3 bigint主键

我想在Rails 3下创建一个bigint (或string或任何非int )键入的主键字段。 我有一个给定的数据结构,例如: things —— id bigint primary_key name char(32) 我目前正试图推动的方法: create_table :things, :id => false do |t| # That prevents the creation of (id int) PK t.integer :id, :limit => 8 # That makes the column type bigint t.string :name, :limit => 32 t.primary_key :id # This is perfectly ignored 🙁 end […]