【问题标题】:Rails doesn't see Bigint id in routesRails 在路线中看不到 Bigint id
【发布时间】:2015-11-05 10:40:00
【问题描述】:

我在 Rails 应用程序中有路线:

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

它定义了路由'/products/:id/preview'。

Products.id 在数据库中是 bigint。

当我打开 URL '/products/15/preview' 时,它工作正常。 但是当我用大 id = 67500 打开它时,它大于整数 = 65535 的最大值:

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

它显示 404 错误。这里 id = 67500 大于 Integer (65535) 并且路由不起作用。

如何让 Rails 识别 BIGINT 类型的 id ?

【问题讨论】:

  • 请发布您的控制器代码
  • 您应该通过此更改产品create_table :products, :id => false do |t| t.integer :id, :limit => 8 endid
  • 控制器:def preview id = params[:id] @row = Product.find(id) end

标签: ruby-on-rails routes


【解决方案1】:

Rajarshi Das 是对的 - 这不是路由问题,而是数据库问题。


数据库

您系统的 routes 部分只会将所需的参数发送到您的控制器。它与您发送的号码的大小无关 - 它是“愚蠢的”。

问题似乎与您的数据库有关 - 无法查找您请求的 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

【讨论】:

  • 我已经在数据库中拥有 bigint 类型的列 ID。我重新启动服务器,现在它可以工作了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 2013-12-06
相关资源
最近更新 更多