【发布时间】:2014-07-01 14:16:05
【问题描述】:
环境是 Ruby 2.0.0、Rails 4.0.3、Windows 8.1、Simple Form、IE 或 Firefox。
我无法让 HTML 输入 type=submit 在编辑操作中触发。新动作几乎相同,并且始终如一地工作。在这种情况下,我已经消除了表单上几乎所有的输入和子菜单,以简化这个特定的问题。
当我单击新操作中的提交按钮时,它会触发控制器创建操作。当我单击编辑操作中的提交按钮时,实际上没有任何反应。任何操作的日志或客户端控制台中都不会出现任何跟踪信息。不会触发控制器更新操作。在这两种情况下,断点都表明@car 引用了适当的汽车对象。
我使用标准 HTML 进行提交,因为表单按钮从不与我正在构建的复杂菜单一起使用。我使用表单属性将按钮与表单相关联,并进行了三次检查以确保 HTML 输入标记中指定的表单与表单中的表单匹配,无论是 new_car 还是 edit_car。
控制器动作是:
def edit
@car = Car.find(params[:id])
end
def new
@car = Car.new
end
路由定义使用:
resources :cars
new.html.erb:
<div class="row">
<%= render partial: 'new', layout: 'layouts/sf_label', locals: { title: 'New Car' } %>
</div>
edit.html.erb:
<div class="row">
<%= render partial: 'edit', layout: 'layouts/sf_label', locals: { title: 'Edit Car' } %>
</div>
工作的“新”部分形式是:
<div class="span8">
<%= simple_form_for @car,
defaults: {label: false},
html: {class: 'form-vertical'},
wrapper: :vertical_form,
wrapper_mappings: {
check_boxes: :vertical_radio_and_checkboxes,
radio_buttons: :vertical_radio_and_checkboxes,
file: :vertical_file_input,
boolean: :vertical_boolean
} do |f| %>
<%= f.input(:stock_number, {input_html: {form: 'new_car', car: @car}, autocomplete: :off, placeholder: 'Stock number?'}) %>
<input type="submit" form="new_car" value="Create Car" class="btn btn-default btn btn-primary">
<% end %>
</div>
失败的“编辑”部分是:
<div class="span8">
<%= simple_form_for @car,
defaults: {label: false},
html: {class: 'form-vertical'},
wrapper: :vertical_form,
wrapper_mappings: {
check_boxes: :vertical_radio_and_checkboxes,
radio_buttons: :vertical_radio_and_checkboxes,
file: :vertical_file_input,
boolean: :vertical_boolean
} do |f| %>
<%= f.input(:stock_number, {input_html: {form: 'edit_car', car: @car}, autocomplete: :off, placeholder: 'Stock number?'}) %>
<input type="submit" form="edit_car" value="Update Car" class="btn btn-default btn btn-primary">
<% end %>
</div>
new_car 的 HTML 表单和按钮是:
<input type="text" value="" placeholder="Stock number?" name="car[stock_number]" id="car_stock_number" form="new_car" class="string required" car="#<Car:0x9830ef8>">
<input type="submit" class="btn btn-default btn btn-primary" value="Create Car" form="new_car">
edit_car 的 HTML 表单和按钮是:
<input type="text" value="AStock" placeholder="Stock number?" name="car[stock_number]" id="car_stock_number" form="edit_car" class="string required" car="#<Car:0x62ebd08>">
<input type="submit" class="btn btn-default btn btn-primary" value="Update Car" form="edit_car">
Gemfile 是:
source 'https://rubygems.org'
ruby '2.0.0'
gem 'rails', '4.0.3'
gem 'sass-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jquery-turbolinks'
gem 'jbuilder', '~> 1.2'
gem 'bootstrap-sass'
gem 'figaro'
gem 'pg'
gem 'simple_form', '3.0.1'
gem 'thin'
gem 'devise'
gem 'cancan'
gem 'rolify'
gem 'acts_as_tenant'
gem 'jquery-datatables-rails', github: 'rweng/jquery-datatables-rails'
gem 'jquery-ui-rails'
group :production do
gem 'rails_12factor' # For Heroku
end
group :development do
gem 'better_errors'
gem 'binding_of_caller'
gem 'guard-bundler'
gem 'guard-rails'
gem 'guard-rspec'
gem 'hub', :require=>nil
gem 'quiet_assets'
gem 'rails_layout'
gem 'rb-fchange', :require=>false
gem 'rb-fsevent', :require=>false
gem 'rb-inotify', :require=>false
end
group :development, :test do
gem 'factory_girl_rails'
gem 'rspec-rails'
end
group :test do
gem 'database_cleaner', '1.0.1'
gem 'email_spec'
end
为 new_car 生成的表单标签:
<form novalidate="novalidate" method="post" id="new_car" class="simple_form form-vertical" action="/cars" accept-charset="UTF-8">
为edit_car生成的表单标签:
<form id="edit_car_53" class="simple_form form-vertical" novalidate="novalidate" method="post" action="/cars/53" accept-charset="UTF-8">
【问题讨论】:
-
会不会是
form="edit_car"让它不起作用?您是否尝试过使用form="new_car"作为新操作? -
嗯,按钮的form属性应该和form中的form属性一样,就是edit_car。但是,在尝试任何事情一次的概念下,我尝试了它。结果一样,基本没有反应。但是,谢谢。
-
您如何提交表单?您是否使用 Javascript 扫描表单然后在有效时提交?
-
在使用完整表单时,我在表单中运行 jQuery。为了诊断这个问题,我消除了所有这些输入并删除了 jQuery 代码。这个问题没有我提供的 JavaScript 代码,但是 SimpleForm 和其他 gem 可能有 js 代码。
-
@Graeme McLean -- 实际上,我只是在表单定义中添加了 id: 'edit_car' 并触发了!请将您的回复更新为正式答案,以便我接受。感谢所有帮助!
标签: html ruby-on-rails forms