2009-10-07 4 views
1

Итак, у меня есть модель, которую мне нужно для сериализации/чтения из документа Excel (XLS). Я немного потерял, где этот код действительно принадлежит. Моя первоначальная мысль заключается в том, что to_xls - это представление, но после того, как он заглядывал и видел такие вещи, как (to|from)_xml и (to|from)_json в ActiveRecord, мне было интересно, может быть, этот материал принадлежал модели. В качестве альтернативы, он где-то находится в отдельном контейнере?Где помещать to_xls и from_xls в приложение rails

Для чего стоит, пользователи будут загружать модели с сайта, модифицируя их в excel, а затем отправляя их.

ответ

0

to_xls должен определенно есть вид. Я бы попробовал /app/views/foos/show.xls.erb, но если вам не нравятся представления ERB для XLS, попробуйте RbTemplateHandler сделать рендеринг в чистом Ruby.

from_xls - совсем другое зверь. Это, конечно, не принадлежит контроллеру. Он логически относится к модели, но я бы извлек ее в mixin. Если вы только вытягивать в формате XLS для одной модели, то следующие установки должны быть достаточно:

# app/models/foo.rb 
class Foo 
    extend XLS2Foo 
    ... 
end 

# lib/foo_from_xls 
module XLS2Foo 
    def to_foo(xls) 
    ... 
    end 
end 

Если вам нужно сделать, это для связки моделей, вы можете попробовать парсер-генератор DSL в вас lib каталоге и объявить себя парсерами для каждой модели в классах моделей.

+0

Понял, что мне нужно сделать то же самое для пары моделей, в основном сериализуясь на древовидную таблицу. Основная проблема заключается в том, объявляю ли я ее как модельный микс или как нечто, что действует на модели, которые являются определенной структурой. –

0

to/from_xls не поддерживаются Rails. Существует плагин, но я не использовал его to_xls plugin for Rails. Лучший способ может быть для вас пойти в CSV и из него, используя FasterCSV и получить то, что можно использовать. Вот один пример: Export to_csv from ActiveRecord

+0

У меня есть функции, написанные для выполнения того, что я хочу сделать. Я пытаюсь сосредоточиться на том, куда я должен поместить код. –