как добавить уникальный для столбца таблицы в рубине на направляющих

У меня есть таблица с некоторыми столбцами, теперь я должен изменить один столбец для создания ее уникальной (никакие дублирующиеся значения), как я могу сделать это в рубине на направляющих?

8
задан Taryn 17 November 2013 в 14:48
поделиться

4 ответа

Вы можете добавить в свою модель проверку, чтобы запретить повторяющиеся значения

class MyModel < ActiveRecord::Base
   validates_uniqueness_of :my_column_name
end
7
ответ дан 5 December 2019 в 18:57
поделиться

Это код непосредственно из моего рабочего проекта:

add_index( :tickets, [:to_email, :body_hash, :from_email] , :unique => true, :limit => 255)

Обратите внимание, что limit функциональность требуется только в том случае, если вы используете unique в текстовом поле (а не в строке), хотя это не реализовано в рельсах пока (я полагаю, что он появится в версии 3.0). Вы можете обойти это ограничение, используя плагин mysql_index_length http://github.com/eparreno/mysql_index_length/

add_index( :table_name, [:column_name, :second_column_name, :third_column_name] , :unique => true, :limit => 255)

в этом примере создается уникальный индекс для трех столбцов, хотя вы можете использовать его для одного столбца, если хотите .

Ссылка на проект на GitHub: http://github.com/thinkbohemian/WhySpam/blob/master/db/migrate/20091223193335_add_unique_index.rb

3
ответ дан 5 December 2019 в 18:57
поделиться

Кто-нибудь, поправьте меня, если я ошибаюсь, потому что я не использовал это лично, но я считаю, что вы можете использовать миграцию для установки уникальности на уровне базы данных.

def self.up
    change_column :<table name>, :<attribute name>, :<data type>, :unique => true
end
-1
ответ дан 5 December 2019 в 18:57
поделиться
 counter = 0
 Model.all.each {|m| m.some_value = counter; m.save; counter += 1;}

:)

и затем добавить валидацию, как ответил @j.

-4
ответ дан 5 December 2019 в 18:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: