2015-11-05 3 views
0

У меня есть маршруты в приложении Rails:Rails не видит BigInt идентификатора в маршрутах

resources :products do 
    get 'preview', to: 'products#preview', on: :member 
    #member do 
    # get 'preview' 
    #end 
end 

, которая определяет маршрут «/ продуктов /: идентификатор/просмотр».

Products.id - это bigint в базе данных.

Когда я открываю URL '/ products/15/preview', он отлично работает. Но когда я открываю его с большим ид = 67500, который больше, чем максимальное значение для целого числа = 65535:

http://localhost:3000/products/67500/preview 

он показывает ошибку 404. Здесь id = 67500, который больше, чем Integer (65535), и маршрут не работает.

Как сделать Rails распознать идентификатор типа BIGINT?

+0

Пожалуйста, отправьте код контроллера – Src

+1

вы должны изменить 'id' столбец продуктов' create_table: продукты,: Ид => false do | t | t.integer: идентификатор,: предел => 8 end' этим контроллером –

+0

: Защиту Предварительный просмотр ID = Params [ID]: @row = Product.find (ID) конец –

ответ

1

Rajarshi Das является правильным - это проблема не с маршрутами, а с базой данных .


DB

В маршрутах части вашей системы будет просто отправка необходимого Params к контроллеру. Он не влияет на размер отправляемого вами номера - он «немой».

Проблема связана с вашей базой данных - невозможно найти id, о котором вы просили.

Чтобы это исправить, нужно изменить id столбец accommodate larger numbers:

$ rails g migration ChangeIDProducts 

#db/migrate/change_id_products______.rb 
class ChangeIdProducts < ActiveRecord::Migration 
    def change 
     change_column :products, :id, limit: 20 
    end 
end 

$ rake db:migrate 
+0

У меня уже есть столбец id типа bigint в базе данных. Я перезапускаю сервер, и теперь он работает. Благодаря! –

+0

А что происходит? –

+0

Вы правы. это не связано с маршрутами –

Смежные вопросы