Tworzenie nowego wpisu w bazie to kolejno: new() -> formularz -> create() -> redirect_to show()
I bardzo dobrze. Rzecz w tym, że przed redirect chciałbym utworzyć plik zlecenie.xml wykorzystywany przez inną aplikację. Oczywiście mogę stworzyć taki plik “ręcznie” ale skoro jest dostępny mechanizm renderowania wzorców, a ja będę miał wiele różnych plików zleceń to dlaczego tego mechanizmu nie wykorzystać. Tylko jak to zrobić żeby wynik działania “render zlecenie.xml” został zapisany do wskazanego pliku lub do zmiennej i nie był wysyłany do przeglądarki?
render_to_string nie pomaga?
A nie lepiej zrobić after_create :create_xml w modelu który tworzysz i odpowiedzialność za utworzenie dodatkowego pliku xml przerzucić na model ? Render “plik.xml” w kontrolerze i zapis tego do pliku to imho nadużycie (nie do tego powstał render)
Plik xml możesz bardzo łatwo zbudować w modelu za pomocą XmlBuilder’a
Można nawet prościej, nie potrzeba buildera.
user = User.first
puts user.to_xml
Jeśli się nie mylę to właśnie .to_xml jest używane przy wysyłaniu xmla przez kontroler.
Dziękuję bardzo za te odpowiedzi.
Zacznę może od końca. Podanego rozwiązania niestety nie mogę wykorzystać gdyż struktura pliku zlecenia korzysta z wielu modeli i raczej rzadko w całości.
Przeniesienie tworzenia pliku zlecenia do modelu jest w sumie uzasadnione ale … jak wcześniej pisałem, plik zlecenia to nie tylko jeden model ale zbiór danych z różnych modeli szczególnie przy aktualizacji danych. Poza tym wolę wykorzystać templaty podając jedynie wartości parametrów niż budować plik od zera. Stąd wykorzystanie render_to_string wydaje mi się rozwiązaniem lepiej spełniającym zadanie.
Popróbuję i zobaczę co z tego wyjdzie.