如何为具有选项子属性的模型创建路径?假设我正在创建一个帮助台应用程序,并且该票证可能与客户之前与我订购的订单相关联,或者可能与他们尚未订购的目录中的项目有关。
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可以为空。
所以我会在他们关闭的订单页面上说明他们的order_id旁边有一个'创建客户服务票'链接......以及产品目录页面上item_id旁边的类似链接。
我认为网址结构应如下所示:
customer_service_ticket /新/订单/ 123
创建与订单相关的故障单
和
customer_service_ticket /新/项目/ 789
创建与项目相关的故障单
而且只是 customer_service_ticket /新 什么时候没有(也适用于客户只有一般性问题的情况)
我如何构建最有效的路线?我没有和上面的URL结构结婚,如果有更好的方式我很乐意尝试它。
答案 0 :(得分: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_many
会稍微更改上面的路由声明。