Библиотека open-uri использует константу для установки предела размера в 10 КБ для объектов StringIO.
> OpenURI::Buffer::StringMax
=> 10240
Вы можете изменить эту настройку на 0, чтобы в open-uri никогда не создавался объект StringIO. Вместо этого это заставит его всегда создавать временный файл.
Просто добавьте это в инициализатор:
# Don't allow downloaded files to be created as StringIO. Force a tempfile to be created.
require 'open-uri'
OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax')
OpenURI::Buffer.const_set 'StringMax', 0
Вы не можете просто установить константу напрямую. Вам нужно удалить константу и затем установить ее снова (как указано выше), в противном случае вы получите предупреждение:
warning: already initialized constant StringMax
ОБНОВЛЕНО 18/12/2012 : Rails 3 не по умолчанию не требуется OpenURI, поэтому вам нужно добавить require 'open-uri'
вверху инициализатора. Я обновил код выше, чтобы отразить это изменение.
Взгляните на Attached Command Behavior Марлона Греча, это может быть именно то, что вы ищете
Для обработки событий у вас должен быть код, который присоединяется к событию и выполняет вашу команду в ответ. Конечная цель - иметь в XAML:
MouseMoveCommand="{Binding MyCommand}"
Для этого вам необходимо определить присоединенное свойство для каждого события, которое вы хотите обработать. См. этот для примера и структуры для этого.
Я не думаю, что вы можете использовать его в чистом XAML, но взгляните на Delegate Command .
Выполнить команду, перейти к кадру и делегировать команду поведение - довольно хороший образец. Его также можно использовать в Expression Blend.
Что касается «передового опыта», вам следует дважды подумать, прежде чем преобразовывать событие в команду. Обычно команда - это то, что пользователь делает намеренно, событие чаще всего является просто следом взаимодействия и не должно выходить за границы представления.