更改:id默认资源标识符

Pet*_*kov 1 ruby-on-rails params rails-routing ruby-on-rails-4

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

我已经开始了 airport.rb

self.primary_key = 'code'
Run Code Online (Sandbox Code Playgroud)

并在 airports_controller.rb

def show
  @airport = Airport.find(params[:code])
end
Run Code Online (Sandbox Code Playgroud)

但是当我试图获得时domain.com/airports/led,我会收到:

找不到没有身份证的机场

在请求参数我有

{"action"=>"show", "controller"=>"airports", "id"=>"led"}
Run Code Online (Sandbox Code Playgroud)

如果我将控制器更改params[:code]params[:id]可行,但我不想以这种方式使用它,因为我id在DB中没有列.

pot*_*hin 9

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

resources :airports, param: :code
Run Code Online (Sandbox Code Playgroud)

这应该导致以下URI模式:

/airports/:code(.:format)
Run Code Online (Sandbox Code Playgroud)

因此,您可以从控制器访问该段params[:code].