0

問題の説明:

テーブルAの要素をテーブルBの要素にマップするための中間テーブルXがあります。

このテーブル X には、このマッピングのプロパティに関する多くの列も含まれています。テーブル X のレコードの一意性は、id od A と id od B だけでなく、マッピングを表す一意の識別子でもあります。

テーブル X のプロパティを更新しようとしたときに、ルートに追加しました。

map.A :only=>[:none] do |a|
    a.resources B :controller=>X :only[:update]
end

map.resources x :only=>[:update]

したがって、これは基本的に、X コントローラーの更新メソッドにアクセスするための可能な URL を提供します。

質問:

私の質問は、A と B または単に X 識別子を渡すことによって、コントローラーがいつアクセスされたかをどのように知ることができるかということです。パラメータを見ると、Aが存在するかどうかを確認でき、存在しない場合はXである必要がありますが、これはあまり実用的/安全ではありません。より複雑になると、正確なケースを検出するために複数の if が必要になります。

さらに悪いことに、何らかの理由で次のような別のルートがあると想像してください。

map.resources Y :controller=>X :only[:update]

次に、私の params ハッシュには :id だけがあり、条件が機能しない場合...

コメント:

パラメータハッシュのキーの名前を変更できるようにルートのオプションがあればいいのにと思い:keyますが、Rails 2で読んだことから、そのようなことはなく、可能であればプラグインを避けたいと思います。データベースを検索できるように、if ケースまたは URL を解析して渡されたパラメータを伝えるよりも良い方法はありませんか?

ありがとう!!!

4

1 に答える 1

1

これは、実際には2つの異なるアクションでケースを処理したい場合のように思えます、デフォルトのハッシュを使用することでこれを回避できます - http://guides.rubyonrails.org/ routing.html#defining-defaults -- 同じケースにたどり着くためにどちらをフォローしているかを示すパラメーターを指定します。

2 つの異なるアクションとは:action => update_from_a、通常のメソッドに加えて、ルートに があり、コントローラーに適切なメソッドがあることを意味し:updateます。このアドバイスの一部は、Rails 3 固有のものである可能性があります。

于 2012-07-25T19:05:48.617 に答える