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 に答える