ruby-on-rails – 如何在Rails中使用两个带有一个模型的控制器

ruby-on-rails – 如何在Rails中使用两个带有一个模型的控制器,第1张

概述我有一个订单模型.客户通过Orders控制器与Order模型进行交互.管理员通过“购买”控制器与订单模型进行交互. 它大部分都在工作,除非发生这种情况: >管理员用户转到new_purchase_path >该应用程序使用购买控制器中的“创建” *** 作,如     预期 >然后,应用程序在订单控制器中使用“新” *** 作(而不是 购买控制器) >然后应用程序呈现“app / purchases / new” 我有一个订单模型.客户通过Orders控制器与Order模型进行交互.管理员通过“购买”控制器与订单模型进行交互.

它大部分都在工作,除非发生这种情况:

>管理员用户转到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中使用两个带有一个模型的控制器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存