我们的应用程序允许下达订单,这种不足为奇的路线:
App.Router.map ->
@resource "orders", ->
@route "new"
订单对象与用户关联,不足为奇。 (实际上,我们称之为订阅者,但我正在尝试最小化此处的内部术语。)在上述路线中,创建了一个新用户或从列表中选择了现有用户:
App.OrdersNewRoute = Em.Route.extend,
model: ->
@get("store").createRecord('order', user: @get('store').createRecord('user') )
我们希望能够在用户已设置的情况下创建订单,即如果我们在/users/1
的路线上查看用户,我们可以转到/users/1/orders/new
并创建一个新订单以user_id: 1
订购。所以我们尝试了这个:
App.Router.map ->
@resource "users", ->
@route "new"
@resource "user", path: "/:user_id", ->
@route "show"
[...]
@resource "orders", ->
@route "new"
和这个控制器:
App.UserOrdersNewRoute = Em.Route.extend,
model: ->
@get("store").createRecord('order', user: @modelFor('user') )
这不是一种有趣的方式。
link_to 'orders.new'
,我们会被发送到路径/users/undefined/orders/new
。/users/1/orders/new
路径,则会使用OrdersNewController
而不是UserOrdersNewController
。还在商店中创建了一个新用户,因此它没有使用UserOrdersNewRoute
。我做了a fiddle illustrating this。
我这样做错了,还是这不是解决问题的实际方法? 我可以在不同的路线上以不同的方式创建相同类型的资源吗?