更改:id默认资源标识符

时间:2015-05-03 18:15:37

标签: ruby-on-rails ruby-on-rails-4 params rails-routing

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时,我会收到:

  

无法找到没有身份证的机场

在请求参数中我有

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

如果我将控制器params[:code]更改为params[:id]它可以正常工作,但我不想以这种方式使用它,因为我没有id DB中的列。

1 个答案:

答案 0 :(得分:9)

当您在Rails 4中声明路由时,可以使用:param选项覆盖默认资源标识:id

resources :airports, param: :code

这应该会产生以下URI模式:

/airports/:code(.:format)

因此,您可以使用params[:code]从控制器访问该细分受众群。