2012-04-24 92 views
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的模式中可以为空。

因此,我将有一个“创建客户服务票证”旁边的链接其关闭订单页......和旁边的产品目录页上的ITEM_ID类似的联系上他们说,他们的order_id的。

我想的URL结构应该是这样的:

customer_service_ticket /新/顺序/ 123

对与订单

customer_service_ticket /新创建的通知单/项目/ 789

,欲取得项创建车票

,只是 customer_service_ticket /新 时,有没有(也适用于凡客只是有一个普遍的问题的情况下)

我将如何构建的路线是最有效的?如果有更好的方法我很乐意尝试,我不会与上面的URL结构结婚。

回答

0

根据你如何描述你的路线,这听起来像你需要创建一个新的客户服务票据时已经存在的订单和项目,这是否正确?如果是这样,那么这将是最好创建你这样的路线:

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

任何要添加资源到现有的资源时,新的资源,一般延续到了最后,你正在执行之中的行动网址的最后部分。要创建此结构,它将是这样的:

resources :orders do 
    resource :customer_service_ticket 
end 

resources :items do 
    resource :customer_service_ticket 
end 

resources :customer_service_ticket 

但是,您可能还想重新考虑您的关系。一旦订单/物品的客户服务关闭,您是否确定将永远不会有与该订单/物品相关的另一个客户服务票据?这可能表示has_many关系。您也可能想要查看订单和物品到客户服务票据的多态关系。这样,如果您想添加更多与客户服务票据相关的实体,则不必继续添加数据库字段。请注意,更改为has_many会稍微改变上面的路由声明。

相关问题