1

我正在尝试让我的 rails 3 应用程序使用如下所示的路线:

exampleapp.com/patients/123456

而不是

exampleapp.com/patients/1

其中“123456”将与患者的病历编号 ( :mrn) 相关联,该编号已在:patients表中并且是唯一整数。我想用:mrn代替通常的:id. 我该怎么办?

抱歉,如果这已经被问到 - 我找不到关于我正在尝试做的事情的术语。谢谢!

4

3 回答 3

6

你可以这样做,

class Patient < ActiveRecord::Base
  self.primary_key = "mrn"
end

但是,这会改变很多其他的事情。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

采用

match "/patients/:mrn" => "patients#show"
match "/patients/:mrn" => "patients#update", :via => :put
于 2012-05-16T19:59:14.463 回答
5

您可以将其添加到您的患者模型中

def class Patient < ActiveRecord::Base
  self.primary_key = "mrn"  
end
于 2012-05-16T19:02:22.650 回答
1

您可以通过在 Resource 实例上重新定义 member_scope 和 nested_scope 方法来自定义每个资源的标识符。

resources :patients do
  @scope[:scope_level_resource].tap do |u|
    def u.member_scope
      "#{path}/:mrn"
    end

    def u.nested_scope
      "#{path}/:#{singular}_mrn"
    end
  end
end
于 2012-08-03T15:23:59.193 回答