它大部分都在工作,除非发生这种情况:
>管理员用户转到new_purchase_path
>该应用程序使用购买控制器中的“创建” *** 作,如
预期
>然后,应用程序在订单控制器中使用“新” *** 作(而不是
购买控制器)
>然后应用程序呈现“app / purchases / new”视图(不是
“app / orders / new”视图,尽管它已切换到使用订单控制器
>管理员创建订单后,应用程序然后呈现
使用订单控制器的“app / orders / show”视图
我真正需要做的是:
>管理员用户转到new_purchase_path
>然后,应用程序在购买控制器中使用“创建” *** 作
>然后,应用程序使用购买控制器中的“新” *** 作
>该应用程序然后呈现“app / purchases / new”视图
>管理员创建订单后,应用程序然后呈现
使用购买控制器的“app / purchases / show”视图
在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,并且自然它不起作用.我能做什么?
解决方法 这个问题的答案与你的 last question有关.我已经更新了 my answer there,但简而言之,问题不在于respond_with(正如@ jiri-pospisil指出的那样你并不真正需要),而是你的表格由simple_form_for.该表单中的 *** 作URL默认为/ 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将重定向到OrdersController的show动作.要解决此问题,您可以使用location选项:
def create @purchase = Order.new(params[:purchase]) if @purchase.save respond_with(@purchase,:location => purchases_path(@purchase)) ...
正如您可能在这一点上所说的那样,对于单个模型使用两个控制器会变得有些复杂,因此您可能需要考虑使用namespaces.
总结以上是内存溢出为你收集整理的ruby-on-rails – 如何在Rails中使用两个带有一个模型的控制器全部内容,希望文章能够帮你解决ruby-on-rails – 如何在Rails中使用两个带有一个模型的控制器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)