提交 ROE 后似乎无法保留表单数据
Can't seeem to keep form data after submit ROR
问题我有一个用于打印标签的 rails 应用程序。无论我尝试过什么,我的 select_tag 总是会默认回到第一选择。我希望它保留我 select 在页面 reload/submit 之后编辑的选择。任何帮助将不胜感激。
这是我的表格
= form_tag label_print_sessions_path, :method => 'get', :class => "form-horizontal" do
.row-fluid
.span6
=render "form_entry", :field_name => "print_job"
= text_field_tag :type, "manual", :style => 'display:none;'
.span6
=render "form_entry", :field_name => "description"
.row-fluid
.span6
=render "form_entry", :field_name => "total_qty"
.span6
=render "form_entry", :field_name => "qty_per_label"
这些是 select 标记,我想在提交页面后保留值 selected。
.row-fluid
.span6
.control-group
= label_tag :printer, "Select a Printer: ", :class => 'control-label'
.controls
= select_tag :printer, options_for_select([["Printer 1", "10040"], ["Prototype", "10080"]], :selected => params[:printer], :input_html => {:value => ''})
.span6
.control-group
= label_tag :label_format, "Select a Format: ", :class => 'control-label'
.controls
= select_tag :label_format, options_for_select([["T-1. fmt", "11381"], ["G-2. fmt", "11380"], ["U-1. fmt", "11420"]], :selected => params[:label_format], :input_html => {:value => ''})
控制器
def label_print
if params[:printer] && params[:label_format]
current.add_print_params(params)
@printer = current.printer
@label = current.label_format
winpath = @label.windows_path
if current.qty_per_label == "0"
flash[:error] = "Qty Per Label cannot be blank"
redirect_to label_setup_sessions_path
else
File.open("/tmp/print_job.xml", "w") do |f|
f.puts '<?xml version="1.0" encoding="utf-8" standalone="no"?>'
f.puts '<!DOCTYPE labels SYSTEM "label.dtd">'
f.puts '<labels>'
current.number_labels.times do |x|
f.puts ' <label _FORMAT="' + winpath + '" _QUANTITY="1" _DUPLICATES="1" _JOBNAME="Labels for #{current.user}" _PRINTERNAME="' + @printer.name + '">'
f.puts ' <variable name="qty">' + current.label_qty(x) + '</variable>'
f.puts ' <variable name="description">' + current.description + '</variable>'
f.puts ' </label>'
f.puts ''
end
f.puts '</labels>'
end
FileUtils.mv('/tmp/print_job.xml', '/mnt/shares/easylabel/print_job.xml')
gflash :success => { :value => "Labels sent to printer!", :time => 5000 }
redirect_to label_setup_sessions_path
end
else
flash[:error] = 'You should not be on this page. General Error.'
redirect_to root_url
end
end
根据 Rails docs,您不需要传递 :selected
选项:
= select_tag :printer, options_for_select([["Printer 1", "10040"], ["Prototype", "10080"]], params[:printer])
除非你有充分的理由,否则我会使用 POST
或 PATCH/PUT
而不是 GET
作为你的表单。
您正在使用 :selected 选项,您只能将其作为 options_for_select
的第二个参数。这里真正的问题是您正在使用 redirect_to label_setup_sessions_path
而 params[:printer]
为零。
改为使用label_setup_sessions_path(params[:printer])
这样 url 将类似于 127.0.0.1:3000/label_setup?printer=weathever
并且 params[:printer] 不会为 nil
如有疑问请告诉我
问题我有一个用于打印标签的 rails 应用程序。无论我尝试过什么,我的 select_tag 总是会默认回到第一选择。我希望它保留我 select 在页面 reload/submit 之后编辑的选择。任何帮助将不胜感激。
这是我的表格
= form_tag label_print_sessions_path, :method => 'get', :class => "form-horizontal" do
.row-fluid
.span6
=render "form_entry", :field_name => "print_job"
= text_field_tag :type, "manual", :style => 'display:none;'
.span6
=render "form_entry", :field_name => "description"
.row-fluid
.span6
=render "form_entry", :field_name => "total_qty"
.span6
=render "form_entry", :field_name => "qty_per_label"
这些是 select 标记,我想在提交页面后保留值 selected。
.row-fluid
.span6
.control-group
= label_tag :printer, "Select a Printer: ", :class => 'control-label'
.controls
= select_tag :printer, options_for_select([["Printer 1", "10040"], ["Prototype", "10080"]], :selected => params[:printer], :input_html => {:value => ''})
.span6
.control-group
= label_tag :label_format, "Select a Format: ", :class => 'control-label'
.controls
= select_tag :label_format, options_for_select([["T-1. fmt", "11381"], ["G-2. fmt", "11380"], ["U-1. fmt", "11420"]], :selected => params[:label_format], :input_html => {:value => ''})
控制器
def label_print
if params[:printer] && params[:label_format]
current.add_print_params(params)
@printer = current.printer
@label = current.label_format
winpath = @label.windows_path
if current.qty_per_label == "0"
flash[:error] = "Qty Per Label cannot be blank"
redirect_to label_setup_sessions_path
else
File.open("/tmp/print_job.xml", "w") do |f|
f.puts '<?xml version="1.0" encoding="utf-8" standalone="no"?>'
f.puts '<!DOCTYPE labels SYSTEM "label.dtd">'
f.puts '<labels>'
current.number_labels.times do |x|
f.puts ' <label _FORMAT="' + winpath + '" _QUANTITY="1" _DUPLICATES="1" _JOBNAME="Labels for #{current.user}" _PRINTERNAME="' + @printer.name + '">'
f.puts ' <variable name="qty">' + current.label_qty(x) + '</variable>'
f.puts ' <variable name="description">' + current.description + '</variable>'
f.puts ' </label>'
f.puts ''
end
f.puts '</labels>'
end
FileUtils.mv('/tmp/print_job.xml', '/mnt/shares/easylabel/print_job.xml')
gflash :success => { :value => "Labels sent to printer!", :time => 5000 }
redirect_to label_setup_sessions_path
end
else
flash[:error] = 'You should not be on this page. General Error.'
redirect_to root_url
end
end
根据 Rails docs,您不需要传递 :selected
选项:
= select_tag :printer, options_for_select([["Printer 1", "10040"], ["Prototype", "10080"]], params[:printer])
除非你有充分的理由,否则我会使用 POST
或 PATCH/PUT
而不是 GET
作为你的表单。
您正在使用 :selected 选项,您只能将其作为 options_for_select
的第二个参数。这里真正的问题是您正在使用 redirect_to label_setup_sessions_path
而 params[:printer]
为零。
改为使用label_setup_sessions_path(params[:printer])
这样 url 将类似于 127.0.0.1:3000/label_setup?printer=weathever
并且 params[:printer] 不会为 nil
如有疑问请告诉我