提问人:Rodrigo Ladrón de Guevara 提问时间:10/8/2023 最后编辑:Rodrigo Ladrón de Guevara 更新时间:10/24/2023 访问量:52
简单形式不将参数传递给控制器 RAILS
Simple form not passing parameter to controller RAILS
问:
我有一个简单的表单,其中包含一些javascript,根据用户的选择显示一些输入字段或其他字段。我得到的奇怪行为是,无论我放在上面(例如),最后一个 f.input() 都不会传递给控制器。如果我更改了 div 的位置,那么现在另一个不会传递。div
div id="id1"
:motivo
f.input :motivo
<%= simple_form_for(@vacacion, validate: true, html: { class: "form-horizontal", role: "form" }) do |f| %>
<%= f.error_notification %>
<%= display_base_errors @vacacion %>
<%= f.input :tipo, label: 'Tipo', as: :select, collection: [["Registrar días de vacaciones utilizados", "tomadas"], ["Abonar días de vacaciones", "abonadas"]], required: true %>
<div id="id1" style="display:none">
<%= f.input :desde, label: 'Fecha inicio vacaciones', as: :datepicker, input_html: { value: @vacacion.desde.present? ? l(@vacacion.desde, format: :slash) : nil } %>
<%= f.input :hasta, label: 'Fecha fin vacaciones', as: :datepicker, input_html: { value: @vacacion.hasta.present? ? l(@vacacion.hasta, format: :slash) : nil } %>
<%= f.input :dias_tomados, label: 'Días de vacaciones utilizados', input_html: { min: 0 }, hint: '<div id="dias_habiles_div"></div>'.html_safe %>
<%= f.input :motivo, input_html: { id: 'motivo_tomadas'} ,label: 'Motivo de los días tomados' %>
</div>
<div id="id2" style="display:none">
<%= f.input :dias_abonados, label: 'Días de vacaciones a abonar', input_html: { min: 0 } %>
<%= f.input :motivo, input_html: { id: 'motivo_abonadas'},label: 'Motivo de los días abonados' %>
</div>
...
$(document).ready(function(){
$("#vacacion_tipo").change(function(){
if(this.value == "tomadas"){
$("#campos_vacaciones_abonadas").hide("slow");
$("#campos_vacaciones_tomadas").show("slow");
}
if(this.value == "abonadas"){
$("#campos_vacaciones_abonadas").show("slow");
$("#campos_vacaciones_tomadas").show("slow");
}
});
我尝试在每种情况下为输入添加 id,但这没有帮助。
当我查看控制台检查参数时,所有其他参数都传递正常,但是使用“motivo”,我得到"motivo"=>""
有什么建议吗?谢谢
答:
0赞
jeffdill2
10/24/2023
#1
这实际上不是 Rails 或 SimpleForm 的问题。这就是表单的工作方式。
看看生成的 HTML,你会看到你有两个名为“motivo”的输入。name 属性是驱动表单提交中传递的参数的因素。由于不能有两个同名的参数,它只是提交它遇到的最后一个参数,有效地覆盖第一个参数。
评论
</form>
f.input :motivo, input_ html: