2013-08-28 4 views
0

Я бы хотел сделать это на Rubat's Datamapper:Ruby datamapper - обратный вызов при создании таблицы?

Создайте таблицу, затем выполните инструкцию SQL (raw) после. Моя БД сейчас является SQLite. Я проверил http://datamapper.org/docs/callbacks.html, но у него ничего нет при добавлении обратного вызова после построения таблицы. Я говорю это, потому что мне нужно добавить ограничение напрямую или что-то вроде таблицы alter после того, как все мои таблицы были сгенерированы. Ограничение - уникальный_индекс над несколькими ключами из другой таблицы. Что-то вроде этого:

class Score 
belongs_to :pageant, :unique_index => :single_score 
belongs_to :candidate, :unique_index => :single_score 
belongs_to :category, :unique_index => :single_score 
belongs_to :judge, :unique_index => :single_score 
end 

Во всяком случае то, что я хочу, чтобы это произошло, что каждая комбинация театрализованное-кандидат-категория-судья должен быть уникальным. Дело: unique_index не работает, если я не добавлю другое поле, которое не связано с другой таблицей. Поэтому я просто подумал о добавлении ограничения через raw SQL (который я бы делал, если бы я не использовал ORM).

ответ

1

Я просто решил это, создав специальную проверку. Дурак я.

validates_with_method :check_uniqueness_of_score 

def check_uniqueness_of_score 
    !(Score.all(pageant_id: self.pageant_id, candidate_id: self.candidate_id, 
     category_id: self.category_id, judge_id: self.judge_id).count > 0) 
end