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 可以为空。

因此,我将在他们关闭的订单页面上说他们的 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关系。您可能还想研究订单和商品与客户服务票证的多态关系。这样,如果您想添加更多与客户服务票证相关的实体,您就不必继续添加数据库字段。请注意,更改为 ahas_many会稍微改变上面的路由声明。

于 2012-05-25T07:35:30.110 回答