我有一个订单模型。客户通过Orders控制器与Order模型进行交互。管理员通过“购买”控制器与订单模型进行交互。
除了发生这种情况之外,它大部分都在工作:
我真正需要做的是:
在app / controllers / purchases_controller.rb中我有这个:
def new
@purchase = Order.new
respond_with @purchase
end
如果尝试了类似的变体......
def new
@purchase = Order.new
respond_with @purchase, :controller => :purchases
end
...但是对于respond_with,没有记录任何类似的东西,自然它不起作用。我该怎么办?
答案 0 :(得分:3)
一些观察结果:
答案 1 :(得分:2)
此问题的答案与您的last question有关。我已经更新了my answer there,但简而言之,问题不在于respond_with
(正如@ jiri-pospisil指出的那样,你真的不需要)但是你的表单生成了按simple_form_for
。该表单中的操作网址默认为/orders
,因为@purchase
是类Order
的实例。
要解决该问题,请在表单中指定网址:
= simple_form_for @purchase, :as => :purchase, :url => purchases_path(@purchase) do |f|
= f.error_notification
= f.input :name
= f.button :submit
然后您会发现还有其他问题:创建新订单(购买)后,respond_with
会重定向到show
的{{1}}操作。要解决此问题,您可以使用OrdersController
选项:
location
正如您可能已经知道的那样,对于单个模型使用两个控制器会变得有些复杂,因此您可能需要考虑使用namespaces。