6

CartおよびCartItem( belongs_to :cart) モデルの構成を取得しました。

私がしたいのは、の代わりに、をpolymorphic_path([@cart, @cart_item])使用するように呼び出すことです。cart_item_pathcart_cart_item_path

ルートによって生成された URL を に変更できることはわかっていますが/carts/:id/items/:id、それは私が興味を持っていることではありません。また、名前CartItemをに変更することItemはオプションではありません。cart_item_pathアプリ全体でメソッドを使用したいだけです。

それについてのヒントを事前にありがとう!

私の主張を明確にするために:

>> app.polymorphic_path([cart, cart_item])
NoMethodError: undefined method `cart_cart_item_path' for #<ActionDispatch::Integration::Session:0x007fb543e19858>

では、私の質問を繰り返しますが、polymorphic_path([cart,cart.item])を検索して検索しcart_item_pathないようにするにはどうすればよいcart_cart_item_pathでしょうか?

4

2 に答える 2

12

コールスタックをずっと下にたどった後、私はこれを思いつきました:

module Cart    
  class Cart < ActiveRecord::Base
  end  

  class Item < ActiveRecord::Base
    self.table_name = 'cart_items'
  end

  def self.use_relative_model_naming?
    true
  end

  # use_relative_model_naming? for rails 3.1 
  def self._railtie
    true
  end
end

関連する Rails コードはActiveModel::Naming#model_nameActiveModel::Name#initializeです。

今、私は最終的に得ます:

>> cart.class
=> Cart::Cart(id: integer, created_at: datetime, updated_at: datetime)
>> cart_item.class
=> Cart::Item(id: integer, created_at: datetime, updated_at: datetime)
>> app.polymorphic_path([cart, cart_item])
=> "/carts/3/items/1"
>> app.send(:build_named_route_call, [cart, cart_item], :singular)
=> "cart_item_url"

Cartの代わりに、Cart::Cartクラスレベルで同じことが機能すると思います。use_relative_model_naming?Cart

于 2012-06-22T08:26:23.760 に答える
2

ルート ファイルで、このようにリソースを宣言できます。

resources :carts do
  resources :cart_items, :as => 'items'
end

レールガイドのこのセクションを参照してください

于 2012-06-22T02:48:49.237 に答える