将大小选项添加到rails中的file_field标记

时间:2011-04-14 07:07:14

标签: ruby-on-rails-3 file-upload form-helpers

ANSWERED

我实际上在制定问题的过程中找到了答案,但我发布了它,因为有些人可能觉得这很有用(如下所述:https://meta.stackexchange.com/questions/49922/should-i-continue-adding-a-question-if-i-have-found-the-answer-myself

我在向ROR3中的文件字段添加大小时遇到​​问题。这是我的语法:

= f.file_field :file, :size => "11"

这不会出现,但会创建一个文件输入字段:

<input type="file" name="soap_test_zip_file[file]" id="soap_test_zip_file_file">

现在我知道我之前已经开始工作了,所以我查看了一些旧代码并发现了这个:

= file_field_tag :file, :size => 11

输出:

<input type="file" size="11" name="file" id="file">

它给了我正确的大小,但错误的文件ID和名称。所以我尝试了这个:

<input type="file" size="11" name="soap_test_file_file" id="soap_test_file_file">

给了我正确的ID,但错误的名字。问题是我如何重现该file_field但具有大小?

我通过Ryan Bigg btw查看了这个答案:Problem showing the 'size' attribute for a 'file_field' using Ruby on Rails 3

他说这是一个跨浏览器的事情,他们以不同的方式呈现文件字段。就是这种情况,但我想渲染一个短文件字段,如果浏览器可以处理它。

3 个答案:

答案 0 :(得分:2)

我用过:

= file_field_tag :soap_test_zip_file, {:name => 'soap_test_zip_file[file]', :size => 11}

这使我覆盖名称(对于控制器)和大小

答案 1 :(得分:0)

似乎对我不起作用..

我想到了另一种选择: jquery ..

$('#user_photo_photo').attr('size', 1);

宾果!!

答案 2 :(得分:0)

如果您不想重写name属性,可以执行以下操作:

保持形式

= f.file_field :file, :size => "11"

为file_field方法添加覆盖

# lib/my_override.rb

module ActionView
  module Helpers
    module FormHelper   
      def file_field(object_name, method, options = {})
        InstanceTag.new(object_name, method, self, options.delete(:object)).to_input_field_tag("file", options.update({:size => options[:size]}))
      end
    end
  end
end

并通过初始化程序加载

# config/initializers/load_lib.rb    

require 'my_override'