I would like to define a unique key for records based on 2 columns : 'id' and 'language'
to let the user submits the following strings : id=1 language=en value=blabla english id=1 language=fr value=blabla french
I tried to use set_primary_key and also add_index but it didn't work ( add_index :words, ["id", "language_id"], :unique => true )
I have the following model :
class Word < ActiveRecord::Base
belongs_to :dictionnary
belongs_to :language
attr_accessible :lang, :rev, :value, :dictionnary_id, :language_id
validates :value, :uniqueness => true
end
and this
class Language < ActiveRecord::Base
has_many :words
attr_accessible :lang
end
add_index :words, ["id", "language_id"], :unique => true
It should work. Maybe you have already some non-unique data in your db and index can't be created? But (as @Doon noticed it will be redundant since id is always unique). So you need create primary key on two columns.
To define 2 column primary key in rails use:
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);"
And set primary_key in your model with this gem: http://rubygems.org/gems/composite_primary_keys:
class Word < ActiveRecord::Base
self.primary_keys = :id,:language_id
end