更改 :id 默认资源标识符

Change :id default resource identifier

Airport 模型中,我使用 primary_key 作为机场国际代码,但 Rails 仍然在请求中使用 :id

我设置在airport.rb

self.primary_key = 'code'

并在 airports_controller.rb

def show
  @airport = Airport.find(params[:code])
end

但是当我尝试获取 domain.com/airports/led 时,我收到:

Couldn't find Airport without an ID

请求参数我有

{"action"=>"show", "controller"=>"airports", "id"=>"led"}

如果我将控制器 params[:code] 更改为 params[:id] 它可以工作,但我不想以这种方式使用它,因为我没有 id 列数据库

当您在 Rails 4:

中声明路由时,您可以使用 :param 选项覆盖默认资源标识符 :id
resources :airports, param: :code

这应该导致以下 URI 模式:

/airports/:code(.:format)

因此您可以使用 params[:code] 从您的控制器访问该段。