0

オプションの子プロパティを持つモデルのルートをどのように作成しますか?ヘルプデスクアプリを作成しているとしましょう。チケットは、顧客が以前に注文したものに関連付けられているか、カタログ内のまだ注文していないアイテムに関するものである可能性があります。

class CustomerServiceTicket
  belongs_to :order
  belongs_to :item
  belongs_to :buyer
  belongs_to :customer_service_category
end

class Order
  ...
  has_one :customer_service_ticket
  ...
end

class Item
  ...
  has_one :customer_service_ticket
  ...
end

customer_service_ticketのスキーマでは、order_idとitem_idはnull可能です。

そのため、クローズドオーダーページのorder_idの横に「カスタマーサービスチケットの作成」リンクがあり、製品カタログページのitem_idの横に同様のリンクがあります。

URL構造は次のようになると思います。

customer_service_ticket / new / order / 123

注文に関連して作成されたチケットの場合

customer_service_ticket / new / item / 789

アイテムに関連して作成されたチケットの場合

どちらも存在しない場合はcustomer_service_ticket/newのみ(顧客が一般的な質問をしている場合にも有効)

ルートを最も効率的に構成するにはどうすればよいですか?私は上記のURL構造と結婚していません。もっと良い方法があれば、喜んで試してみます。

4

1 に答える 1

0

ルートの説明からすると、新しいカスタマーサービスチケットを作成する必要があるときに注文とアイテムがすでに存在しているように見えますが、それは正しいですか?その場合は、次のようにルートを作成することをお勧めします。

orders/123/customer_service_ticket/new
items/123/customer_service_ticket/new
customer_service_tickets/new

リソースを既存のリソースに追加するときはいつでも、通常、新しいリソースは最後に配置され、実行しているアクションはURLの最後の部分になります。この構造を作成するには、次のようになります。

resources :orders do
  resource :customer_service_ticket
end

resources :items do
  resource :customer_service_ticket
end

resources :customer_service_ticket

しかし、あなたはまたあなたの関係を再考したいかもしれません。注文/アイテムのカスタマーサービスが終了した後、その注文/アイテムに関連する別のカスタマーサービスチケットがないことを確信していますか?それはhas_many関係を示しているかもしれません。また、顧客サービスチケットに対する注文とアイテムのポリモーフィックな関係を調べることもできます。そうすれば、カスタマーサービスチケットに関連するエンティティをさらに追加する場合に、データベースフィールドを追加し続ける必要はありません。has_manyaに変更すると、上記のルート宣言がわずかに変更されることに注意してください。

于 2012-05-25T07:35:30.110 に答える