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参数。