加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:15:26 所属栏目:百科 来源:网络整理
导读:我有一个订单模型.客户通过Orders控制器与Order模型进行交互.管理员通过“购买”控制器与订单模型进行交互. 它大部分都在工作,除非发生这种情况: 管理员用户转到new_purchase_path 该应用程序使用购买控制器中的“创建”操作,如 ????预期 然后,应用程序在订
我有一个订单模型.客户通过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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读