Dziwny JSON

Hej!
Gdy zapisać chcę mój obiekt wyskakuje mi błąd:
param is missing or the value is empty: order
Zastanawiałem się: Hmm? ale przecież widzę, że przekazuje parametry… ale okazało się, że…

{"utf8"=>"✓",
 "authenticity_token"=>"pPjTsLaNM/OJ3N284pBFdz2qQS07XODywAqYbx4WTgU=",
 "/cars/reddragon/orders/new"=>{"ServiceOperation_id"=>"4",
 "kontakt"=>"213",
 "Car_id"=>"51"},
 "commit"=>"Dodaj"
 }

“/cars/reddragon/orders/new” dopiero to wskazuje na moje parametry, które chcę wyciągnać…

Mój routing do tego post’a

post 'cars/:car_id/orders/new(.:format)' => 'orders#create',

Teraz pytanie? Co możło pójść nie tak? Skąd ta ścieżka w przkazywaniu parametrów i jak jej się pozbyć? (reddragon to nazwa rejestracji auta). Nawet jeśli chciałbym zostawić to jak jest, to jak przechwycić tego JSON’a i wyciągnać mu to, czego potrzebuję?

Pozdrawiam

jak wyglada formularz, którym przesyłasz dane ?

Moja rada, w Ruby stosuje się przeważnie nazwy zmienne zapisane w underscore a nie CamelCase lub jakis dziwny mix underscore z CamelCase.

Dobrze, następnym razem będę się słuchał Twojej rady :smile:
A co do formularza:

<%= form_for new_car_order_path(@car, @order),  html: {class: "add_order"} do |r| %>
  <%= r.label "Usługa", class: :add_order_label	%> 
  <%= r.collection_select(:ServiceOperation_id, ServiceOperation.all, :id, :nazwa) %>
  <%= r.label "Kontakt", class: :add_order_label %>
  <%= r.text_field :kontakt %>
  <%= r.text_field :Car_id, value: @car.id, :style => "display:none" %>
  <%= r.label " "  %> 
  <%= r.submit "Dodaj", class: "sub" %>
  <%= submit_tag "Schowaj", type: 'button', class: 'sub press_to_add'%> 
  <%= button_tag "Czyść", type: 'reset', class: 'sub resetit'%> 

<% end %>

w form_for musisz w pierwszym argumencie przekazać obiekt bazowy czyli chyba w tym wypadku chodzi tobie o @order

<%= form_for @order, url: new_car_order_path(@car, @order),  html: {class: "add_order"} do |r| %>
1 Like

Działa, dziękuję :)

Nie chcę tworzyć nowego tematu, więc zapytam się tutaj:
Jak sprawić, by button/submit tworzył dwa obiekty różnych klas?

A może inaczej:
Klasa Order ma wiele ServiceOperation
ServiceOperation ma wiele Order
łączą się dzieki OperationInOrder

W jaki sposób zbudować formularz, by składając Order, wybrać jedną, lub wiele ServiceOperation (których mam już listę), a zapisując tworzyć obiekt/y OperationInOrder, które łączą Order z wybranymi ServiceOperation?

Z tego co piszesz chodzi tobie o relację wiele do wielu. `W RoR jest coś takiego jak has_many (through): http://guides.rubyonrails.org/association_basics.html (rodział 2.4),jeśli OperationInOrder nie zawierałoby nic poza identyfikatorami to możesz użyć has_and_belongs_to_many (rozdział 2.6).

W formularzu generujesz listę obiektów przekazywaną jako order_ids lub service_operation_ids, w zależności czy obiekt ServiceOperation czy Order jest obiektem bazowym w formularzu.

O relacji (trough) wiem, tak samo o nested attributes i
brakuje mi przykładu takiego formularza i tego, co może w funkcji create/new należy napisać…

<%= form_for @order, url: new_car_order_path(@car, @order),  html: {class: "add_order"} do |r| %>
  <%= r.label "Usługa", class: :add_order_label	%> 
  <%= r.collection_select(:id, ServiceOperation.all, :id, :nazwa) %>
  <%= r.label "Kontakt", class: :add_order_label %>
  <%= r.text_field :kontakt %>
  <%= r.text_field :Car_id, value: @car.id, :style => "display:none" %>
  <%= r.label " "  %> 
  <%= r.submit "Dodaj", class: "sub" %>
  <%= button_tag "Czyść", type: 'reset', class: 'sub resetit'%> 

<% end %>

Wiem, że może proszę o dużo, ale czy ktoś chce przerobić ten formularz tak, bym zrozumiał jak to ma wyglądać (ewentaulnie jak funckja new i create w kontrolerze ma wglądać).

Dobrze że oparłeś się pokusie zakładania nowego tematu dla odrębnego zagadnienia i podpiąłeś się do losowego istniejącego wątku, mamy ograniczoną pulę bazodanowych ID-ków w której musimy się zmieścić.

8 Likes