私はRailsの中に名前空間を持つビットのトラブルを抱えているが、既存のと同じクラス、およびOrderItem
Railsの名前空間4.</p> <p>私はActiveRecordのモデル<code>Shop</code>、<code>Order</code>を持ってactive_recordモデル
# model/shop.rb
class Shop < ActiveRecord::Base
# model/order.rb
class Order < ActiveRecord::Base
has_many :order_items
# model/order_item.rb
class OrderItem < ActiveRecord::Base
belongs_to :orderable, polymorphic: true
belongs_to :order
私は複製していますこの
# model/shop/order.rb
class Shop::Order
attr_accessor :order_items
def initialize
self.order_items = []
self.order_items << Shop::OrderItem.new
end
# model/shop/order_item.rb
class Shop::OrderItem
attr_accessor :orderable_type, :orderable_id
def initialize(params = {})
if params
self.orderable_type = params['orderable_type'] if params['orderable_type']
self.orderable_id = params['orderable_id'] if params['orderable_id']
end
end
def price
orderable.price
end
def orderable
orderable_type.constantize.find_by(id: orderable_id)
end
def to_h
Hash[
orderable_type: self.orderable_type,
orderable_id: self.orderable_id,
price: self.price
]
end
end
のような名前空間のOrder
とOrderItem
との関係だから私の問題は、私がShop::Order.new
を初期化するとき、はShop::OrderItem
の代わりにOrderItem
の配列であり、コントローラーでテストするとShop::OrderItem
と入力すると、OrderItem
が返されます。
OrderItem
より前にShop::OrderItem
が初期化されていないのではないかと疑問に思っています。
「Shop :: OrderItem」をもう少し見てみましょう。 – jvillian
また、好奇心のために、なぜあなたはこれをやっていますか? – jvillian
@jvillianさんがコードを追加しました。私は情報を保持するためにactive_recordのものを使用したくないので、名前空間はチェックアウト前にショッピング情報を保持するためにそこにあるので、チェックアウトすると、名前空間1から情報をactive_recordに転送してデータベースに保存する – lusketeer