1

ObjectID 列を持たないRails モデルがあります。代わりに、他の 2 つのモデルの主キーのタプルを主キーとして使用しdependency_iduser_id.

私がやりたいことは、次のようなことができるようにすることですroutes.rb:

map.resources :object, :primary_key => [:dependency_id, :user_id]

そして、次のような URL を魔法のように生成します。

/objects/:dependency_id/:user_id
/objects/:dependency_id/:user_id/1
/objects/:dependency_id/:user_id/1/edit

...ただし、私はそれを作ったばかりで、そのような構文はありません。

map.resourcesすべてのカスタム ルートを作成しなくても、RESTful URL を取得できるようにカスタマイズする方法はありますか? それとも、ID 規則に従わなかったために私が失敗しただけですか?

この:path_prefixオプションはある程度有望に見えますがid、URL の一部を削除する方法が必要です。可能であれば、引き続きパス ヘルパーを使用できるようにしたいと考えています。

4

1 に答える 1

2

主キーを反映するには、Objectモデルのメソッドをオーバーライドする必要があります。to_paramこのようなもの:

def to_param
  [dependency_id, user_id].join('-')
end

次に、これらのオブジェクト ( など) の URL を設定object_path(some_object)すると、自動的に のようなものに変換されます/objects/5-3。次に、show アクションでparams[:id]on ダッシュを分割し、dependency_id と user_id でオブジェクトを検索する必要があります。

def show
  dep_id, u_id = params[:id].split('-').collect(&:to_i)
  object = Object.find_by_dependency_id_and_user_id(dep_id, u_id)
end

find_by_paramrailsの gem も参照してください。

于 2010-06-29T17:35:22.647 に答える