Ruby on rails, `rails generate` с primary_key, а не целочисленным идентификатором по умолчанию - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть объект модели с именем 'Problem', и я хочу иметь возможность вызывать его действие 'show', используя URL /problems/PROBLEM_NAME.

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

Я пытался rails g model problem problem_name:primary_key problem_text:text, но я получаю очевидную ошибку о наличии нескольких первичных ключей.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Я предполагаю, что в ваших маршрутах у вас есть:

 resources :problems

Перед строкой с resources :problems, в вашем файле rout.rb добавьте это

 match "problems/:problem_name" => "problems#show"

После добавления новогоshow route, в контроллере проблем, в действии show вместо

 @problem = Problem.find(params[:id])

, который вы используете сейчас

 @problem = Problem.find_by_name(params[:problem_name])    

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

0 голосов
/ 13 декабря 2011

В сгенерированной миграции измените эту строку:

create_table :problems do |t|

на эту:

create_table :problems, :id => false do |t|

Но я бы рекомендовал использовать слаг в качестве дополнительного столбца вместо текстового первичного ключа...

...