2

私は少しの問題に遭遇しましたが、どうやってそれを得るのか分かりません。Railsアクティブレコード多態ネストされたリソースのナビゲーション

私たちは、例えば、私たちのデータモデルで多型のネストされたリソースの数を持っている:

宛先>宿泊施設>住所

宛先>アトラクション>住所

だから、アドレス・コントローラに到着することが可能です複数の親から。私はこれらを正しく関連付けることができ、また親の木をバックアップすることができる必要があります。

アドレスはこれらのケースでは同じモデルなので、 の私の最初の解決策は、ルートファイルにネストされたリソースを作成することでした。 私たちは、その後も、私たちのURLは次のように取得するときに、ブレッドクラム ナビゲーション事を提供するために、このネストを使用し始め:

はlocalhost:3000 /地/ 1 /宿泊施設/ 3 /アドレス/新しい

我々はできます分割してそれを使用して、パスを任意のレベルに戻すことができます。

私はまた、コントローラは、ジェネリックにするために、私はマップの親リソースがあるので、コントローラは、このような 見えるかうまく にネストされたリソースを使用

def new 
    @parent = find_parent_model 

    if [email protected]? 
    @destination = @parent.destinations.new 

を[...]

def find_parent 
    params.each do |name, value| 
    if name =~ /(.+)_id$/ 
     return $1.classify.constantize.find(value) 
    end 
    end 
    nil 
end 

これは機能します。しかし、問題は、routes.rbファイルに1800行のネストされたリソースがあり、現在はレールアプリを起動するのに約5分かかっており、そこにはRAMの500MBを使用して が置かれています。 :S

誰もこれを行うのに狂気の方法を知っていますか?

答えて

3

ルーティングのネストされたリソースの構文を使用しないことをお勧めします。

get 'destinations/:destination_id/:parent_type/:parent_id/address/new' => 'address#new' 

よう

つのルートは、すべてのリソースを一致し、かつAddressController#newに、あなたはまた、@parentが、その後予想されるタイプの一つであることを確認したい場合があります

@parent = params[:parent_type].constantize.find(params[:parent_id]) 

を持つことができます。

関連する問題