调用了错误的控制器操作?

时间:2016-06-21 00:07:52

标签: ruby-on-rails slim-lang

Rails 3.2

这是我解决这个问题的第二次尝试。

我继承了处理客户门票的申请。主票证视图既大又复杂,因此它分为多个部分。

我正在尝试添加一个新部分来输入客户信息。

我在正常位置有一个带有控制器和模型的CustomerInfo脚手架:

controllers / customer_infos_controller.rb和models / customer_info.rb。

我将视图放在views / tickets / sections

在我的views / tickets / show.html.slim中,我有:

- @customer_info = customer_info @ticket
h4.form-header Customer Information
.form-section.attachments
  - if @customer_info.nil?
    = render partial: 'tickets/sections/customer_info', locals: {ticket:  @ticket }

在我的views / tickets / sections / _customer_info.html.slim中,我有:

= form_for(CustomerInfo.new, url: customer_info_path) do |f|
  - f.hidden_field :ticket_id, :value => ticket.id
  .form-horizontal-column.customer-info
    .form-group
      = f.label :first
      = f.text_field :first, maxlength: 50
    .form-group
      = f.label :last
      = f.text_field :last, maxlength: 50
    .actions = f.submit 'Save'
.clear

在我的routes.rb中,我有:

post '/customer_infos' => 'customer_infos#create', as: 'customer_info'

运行应用程序时,表单显示正常。但是,当我输入名字和姓氏时,票证会更新。

查看日志文件,我看到当“客户信息”部分中的“保存”按钮时,我看到:

TicketsController处理#update为HTML

在日志中,我也看到了参数:

{
    "ticket":
        {
            .......................
        },
    "customer_info":
        {
            "first":"John",
            "last":"Doe"
        },
    "commit":"Save"
}

rake路线给了我:

customer_info POST /customer_infos(.:format)  customer_infos#create

这是HTML:

<div class="form-horizontal-column customer-info">
    <div class="form-group">
        <label for="customer_info_first">First *</label>
        <input id="customer_info_first" type="text" size="50" name="customer_info[first]" maxlength="50">
    </div>
    <div class="form-group">
        <label for="customer_info_last">Post tax total *</label>
        <input id="customer_info_last" type="text" size="50" name="customer_info[last]" maxlength="50">
    </div>
    <div class="actions">
        <input type="submit" value="Save" name="commit">
    </div>
</div>

这是部分:

<form accept-charset="UTF-8" action="http://xxx.xxxx.xxxx.com/admin/tickets/159384" class="form form-horizontal tickets-form context-form" data-admin="true" enctype="multipart/form-data" id="edit_ticket_159384" method="post">

因此,没有customer_info部分,具有适当的操作和方法。

为什么调用票证控制器更新方法而不是CustomerInfo创建方法?我也没有在参数中看到ticket_id参数。

0 个答案:

没有答案