добавление размера к тегу file_field в рельсах - PullRequest
1 голос
/ 14 апреля 2011

ОТВЕТИЛ

Я действительно нашел ответ при формулировании вопроса, но я публикую его любым способом, поскольку некоторые могут найти это полезным (как сказано здесь: 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">

, который дает мне правильный размер, но неправильный идентификатор файла и имя. Итак, я попробовал это:

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

который дает мне ПРАВИЛЬНЫЙ ID, но НЕПРАВИЛЬНОЕ ИМЯ. Вопрос в том, как мне воспроизвести это file_field, но с размером?

Я посмотрел на этот ответ Райана Бигга, кстати: Проблема с отображением атрибута "size" для поля "file_field" с использованием Ruby on Rails 3

и он говорит, что это кросс-браузерная вещь, они отображают поля файла по-разному. Это так, но я бы хотел отобразить короткое файловое поле, если браузер может его обработать.

Ответы [ 3 ]

2 голосов
/ 14 апреля 2011

Я использовал:

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

Это заставило меня переопределить имя (для контроллера) и размер

0 голосов
/ 06 января 2013

Если вы не хотите переписывать атрибут 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'
0 голосов
/ 02 июня 2011

не похоже на работу для меня ..

Я подумал о другой альтернативе: JQuery ..

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

лото !!

...