Rails 5.1
在我的表格中,我有:
.container
h4
= t('fw_exports.choose_file_to_upload')
//= form_tag url: process_imported_spreadsheet_path, html: { multipart: true }
= form_tag({controller: :fw_exports, action: :process_imported_spreadsheet}, multipart: true)
.form-group
= file_field_tag :import_file
.form_group
= text_field_tag :screen_name_addition, nil, placeholder: "Screen Name To Add"
= button_tag(type: 'submit', class: "btn btn-primary") do
i.icon-ok.icon-white
= t('fw_exports.import')
但是当我提交表格时,我会得到这些参数:
Parameters:
{"utf8"=>"✓", "authenticity_token"=>"...",
"import_file"=>"test.csv",
"screen_name_addition"=>"testname",
"button"=>""}
import_file字段是一个字符串,而不是一个对象。我相信我使用了正确的语法(我也试过了我注释掉的那一行)。
这是HTML:
<form html="{:multipart=>true}" action="/process_imported_spreadsheet" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="✓">
<input type="hidden" name="authenticity_token" value=".....">
<input type="file" name="import_file" id="import_file">
<button name="button" type="submit" class="btn btn-primary"><i class="icon-ok icon-white"></i>Import</button>
</form>
有什么建议吗?
答案 0 :(得分:0)
在Rails 5.1 +
中使用form_with
代替form_tag
= form_with url: process_imported_spreadsheet_path, multipart: true do |form|
= form.import_file
这会用一种方法替换form_tag
和form_for
。除此之外,这还解决了由form_for
和form_tag
的不同签名引起的问题。
form_for
使用html
选项。 form_tag
没有。
= form_tag 'foo', html: { multipart: true } do
将呈现:
<form html="{:multipart=>true}" action="/foo" accept-charset="UTF-8" method="post">
因为任何没有特殊意义的选项都只是作为属性添加。奇怪的{:multipart=>true}
来自.to_s
隐式调用哈希。
这些确实有效:
= form_tag '/foo', multipart: true } do
= form_tag {controller: :foo, action: :index }, multipart: true do
# renders
<form enctype="multipart/form-data" action="/foo" accept-charset="UTF-8" method="post">