oor*_*ort 1 routes ruby-on-rails
我正在尝试让我的rails 3应用程序使用类似于以下内容的路由:
exampleapp.com/patients/123456
Run Code Online (Sandbox Code Playgroud)
而不是
exampleapp.com/patients/1
Run Code Online (Sandbox Code Playgroud)
其中"123456"将与患者的医疗记录编号(:mrn)相关联,该编号已在:patients表格中并且是唯一的整数.我想用:mrn代替平常的:id.我该怎么做?
对不起,如果已经被问过 - 我找不到关于我正在尝试做什么的术语.谢谢!
你可以这样做,
class Patient < ActiveRecord::Base
self.primary_key = "mrn"
end
Run Code Online (Sandbox Code Playgroud)
但是,这将改变一堆其他的东西.to_params将使用mrn.控制器仍将使用params ["id"],但该值将是mrn字段.Patient.find方法适用于mrn字段,但不适用于id字段.(您可以使用Patient.find_by_mrn和Patient.find_by_id来处理它们指定的字段.)此外,所有外键都将是mrn值.
您可以编辑mrn字段,并且您仍然会有一个id字段(除非您将其关闭),但编辑可能会很麻烦,因为所有外键都必须更正.
或者,如果您只想更改URL,则在config/routes.rb文件中而不是
resources :patient
Run Code Online (Sandbox Code Playgroud)
使用
match "/patients/:mrn" => "patients#show"
match "/patients/:mrn" => "patients#update", :via => :put
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以将其添加到您的患者模型中
def class Patient < ActiveRecord::Base
self.primary_key = "mrn"
end
Run Code Online (Sandbox Code Playgroud)