2010-11-20 12 views
5

Chciałbym móc użyć niestandardowego identyfikatora (zamiast automatycznie zwiększających domyślne) dla modelu Rails. Zasadniczo wszystkie identyfikatory będą identyfikatorami sklepu iTunes, które są po prostu długimi liczbami całkowitymi. Czy możliwe jest wyłączenie domyślnych identyfikatorów auto-inkrementujących i wymagają one ustawienia? Te identyfikatory będą również używane jako klucze obce w innych modelach.Nieautomatyczna inkrementacja kolumny "Identyfikator" ActiveRecord?

Odpowiedz

6

coś takiego:

create_table :blah, {:id => false} do |t| 
    t.int :my_custom_int_id 
end 
execute "ALTER TABLE blah ADD PRIMARY KEY (my_custom_int_id);" 
+0

Wygląda na to, czego szukałem, dzięki. – markquezada

+1

Będziesz także musiał dodać 'set_primary_key: my_custom_int_id' (Rails 3) lub' self.primary_key =: my_custom_int_id' (Rails 4) w twoim modelu. – gregoltsov

2

Można ręcznie ustawić identyfikator przed zapisaniem modelu.

a = Model.new 
a.id = 8888 #from itunes 
a.save 

Jednak należy wziąć pod uwagę odrębny pole o nazwie itunes_id zamiast tego podejścia.

+0

Obecnie używam osobnego pola 'itunes_id' podczas opisywania. Problem polega na tym, że interfejs API, którego używam, zwraca identyfikatory wersji programu itunes, więc trudno jest wykonać dodatkowe wyszukiwanie dla itunes_id -> mój identyfikator modelu cały czas. – markquezada

+1

Bardzo podoba mi się, jak powiedziałeś, co powinien zrobić, ale również zaoferował ci swoją radę .. najlepsza praktyka ... :) – baash05

+0

@daveatflow To jest osobista opinia, a nie najlepsza praktyka IMO. –

Powiązane problemy