2 formularze w jednym

Witam,

chciałbym zrobić coś takiego. Użytkownik dokonuje zakupu na stronie będąc zalogowanym. Przy złożeniu zamówienia aplikacja wyświetla formularz z danymi osobowymi potrzebnymi do zamówienia i nie pozwala go złożyć jeżeli dane nie są uzupełnione.
teraz chciałbym za jednym przyciskiem wysłać te dane do controlera, złożyć i zweryfikować zamówienie w systemie oraz jednocześnie przekazać je do formularza płatności. Jak będzie najlepiej to zrobić? Czy na samym końcu po dodaniu zamówienia w systemie w kontrolerze zrobić redirecta do strony płatności przekazując dane za pomocą GET?

Z góry dzięki za pomoc

Może użyć fields_for oraz accepts_nested_attributes_for ?

http://apidock.com/rails/v3.2.13/ActionView/Helpers/FormHelper/fields_for

spoko, dzięki ale bardziej chodziło mi o to jak z kontrolera wysyłać formularz na zewnątrz po zapisaniu zamówiienia w systemie a nie o samo wysłanie formularza do kontrolera.
Znałazłem i z tego co szukałem to chyba jest to http://ruby-doc.org/stdlib-1.9.3//libdoc/net/http/rdoc/Net/HTTP.html w razie jakby ktoś miał lepsze rozwiązanie do zapraszam do podzielenia się :).

Możesz też zobaczyć inne biblioteki jak np HTTParty, oraz warto tą funkcjonalość opakować w jakąś klasę, wtedy będzie łatwiej potem zmieniać no i testować. Btw do testowania możesz użyć gemu VCR.

super, dzięki za pomoc :slight_smile:

a wiesz może jak zrobić żeby wyświetlić stronę na której wypełniamy formularz?
mam np. coś takiego jak poniżej ale póżniej dostaje missing template, wiem że muszę coś renderować dlatego jest ten błąd ale ja chcę polecieć za tym linkiem. Mam zrobić redirecta jakiegoś?

HTTParty.post(“https://secure.transferuj.pl/pay.php”, ‘id’=‘1010’ )

A nie jest tak, że musisz przejść na tą stronę? Może już ktoś używał transferuj.pl w Railsach, może napisz nowy temat?

dokładnie tak jest ale szczerze nie wiem jak to zrobić. Chyba nie ma sensu zakładać nowego tematu bo nie tyczy się on tylko transferuj ale generalnie wysyłania formularza z kontrolera.
Nie wiem jak to zrobić za pomocą HTTParty a poniższy kod wykorzystujący

require ‘net/http’
require ‘net/https’

uri = URI('http://www.example.com/search.cgi') res = Net::HTTP.post_form(uri, 'q' => 'ruby', 'max' => '50') puts res.body
daje mi error

Net::HTTPBadResponse in OrdersController#create

wrong status line: “”

próbowałem różnych opcji i za każdym razem są błędy, pół wieczoru spędziłem na szukaniu rozwiązania i nic :frowning:

Prosiłbym o jakiś działający przykład wysłania formularza z kontrolera za pomocją POST po SSLu no i oczywiście przejście na tą stronę

Byc moze zwiazane jest to z tym - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3 :

Innymi slowy Redirect po akcji POST nie bedzie dzialac i nalezy wykonac ‘recznie’ GET-a. Nie uzywalem HTTParty ale kiedys robilem automatyczne logowanie do Citi przez httpclient i dokladnie z tego powodu musialem wylaczyc automatyczny Redirect przed robieniem POST-a. Moze tu lezy problem?

ok rozumiem, że związane jest to z kwestiami bezpieczeństwa ale nie rozumiem za bardzo

bo ja chcę mięć redirect po POST, chcę polecieć za tym linkiem.

W każdym razie znalazłem takiego GEMa https://github.com/gdi/curb-fu

[quote]Following Redirects, and other advanced topics
you can pass a block to the CurbFu methods, we will yield the Curl::Easy object to this block to allow you to reach as far into the Curb guts as you want. This is particularly useful if you want to follow redirects:

resp = CurbFu.get('http://google.com') { |curb| curb.follow_location = true }

[/quote]
tylko oczywiście jak to zwykle bywa u mnie nie działa :smiley: a to związane z tym, że mam error “template missing” ponieważ robię to w akcji create.

Nie wiem chyba muszę zmienić kierunek rozwiązania bo tutaj utknąłem na za długo.

To co mialem na mysli, to wylaczenie automatycznego ‘follow’ dla redirectow, odczytanie naglowka odpowiedzi ‘Location’ i zrobienie GET-a recznie.

ok. rozumiem teraz ;), zobaczę co jeszcze z tym curb-fu bo szczerze mówiąc to za dużo zachodu z tym już jest i powoli mam dość. Jest jeszcze jedno rozwiązanie, dodać zamówienie do systemu, wyświetlć stronę i zrobić automatycznie posta za pomocą js ale to rozwiązanie mi się nie podoba.