gpt4 book ai didi

ruby-on-rails - 基于 2 列定义唯一的主键

转载 作者:行者123 更新时间:2023-12-03 07:57:32 25 4
gpt4 key购买 nike

我想为基于 2 列的记录定义一个唯一键:'id' 和 'language'

让用户提交以下字符串:
id=1 语言=en 值=blabla 英语
id=1 语言=fr 值=blabla 法语

我尝试使用 set_primary_key 和 add_index 但它没有用( add_index :words, ["id", "language_id"], :unique => true )

我有以下型号:

class Word < ActiveRecord::Base
belongs_to :dictionnary
belongs_to :language

attr_accessible :lang, :rev, :value, :dictionnary_id, :language_id

validates :value, :uniqueness => true

end

和这个

class Language < ActiveRecord::Base
has_many :words

attr_accessible :lang
end

最佳答案

add_index :words, ["id", "language_id"], :unique => true
它应该工作。也许您的数据库中已经有一些非唯一数据并且无法创建索引?但是(正如@Doon 注意到的那样,这将是多余的,因为 id 始终是唯一的)。所以你需要在两列上创建主键。

要在 rails 中定义 2 列主键,请使用:

create_table :words, {:id => false} do |t|
t.integer :id
t.integer :language_id
t.string :value
t.timestamps
end
execute "ALTER TABLE words ADD PRIMARY KEY (id,language_id);"

并使用此 gem 在您的模型中设置 primary_key: http://rubygems.org/gems/composite_primary_keys :
class Word < ActiveRecord::Base
self.primary_keys = :id,:language_id
end

关于ruby-on-rails - 基于 2 列定义唯一的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12746280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com