Witam
Piszę sobie taką małą aplikację(sklep internetoey) na bazie Agille i utknąłem przy zakładaniu konta użytkownika. Wszystko osobno działa ok, ale jak dodam akcję do layoutu sklepu to dostaję komunikat
[code]NoMethodError in Login#add_user
Showing app/views/layouts/store.rhtml where line #21 raised:
You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.items
Prawdopodobnie błąd jest w szablonie częściowym, gdzie pewnie odwołałeś się gdzieś do @cart i nie sprawdziłeś tam czy nie jest pusty, a samo sprawdzenie w metodzie hidden_div_if nie wystarczy bo ono jedynie ukrywa div’a, który mimo to sie wykonuje,… tak więc sprawdź czy w szablonie częściowym masz coś takiego:
Kwestia jest tego typu, że całła obsługa koszyka działa ok, dopóty nie dodam kontrolera login do layoutu store. Oba osobno działają bez zarzutów, A jeden z drugim nie mają nic wspólnego tylko chciałem żeby miały taki sam layout.
Przede wszystkim pisz proszę po Polsku. Nie świadczy o Tobie zbyt dobrze jeśli piszesz “utknołem”, “kwestja”. Sposób opisu problemu też pozostawia wiele do życzenia. Tylko po kodzie jestem w stanie domyślić się w czym problem (bo nie wiem np. co to znaczy “dodać akcję do layoutu”).
Tak jak Athril zasugerował błąd jest przy odwołaniu “obiekt.items” gdzie obiekt = nil. Błąd jest w partialu cart (plik _cart.*). Spróbuj w nim umieścić wywołanie <%= debug(@cart) %> i zobaczysz czy obiekt jest poprawnie widoczny w szablonie.
Co do samego podpinania layoutu. Layout ma prawo nie działać ot tak. Jeśli Twój obiekt @cart jest tworzony w filtrze, to musiałbyś także dodać do tego nowego kontrolera.
find_cart jest metodą prywatną w kontrolerze store
def find_cart
@cart = session[:cart] ||= Cart.new
end
W kontrolerze “login” natomiast nie ma żadnego odwołania do tej metody. Jak dam filter do “ApplicationController” to też nic nie daje bo dalej mi woła, że nie może znaleźć metody “find_cart” w kontrolerze login.
undefined method `find_cart' for #<LoginController:0x10103a8>
No to skoro metoda find_cart ma być widoczna zarówno w klasach LoginController i StoreController (a obie dziedziczą po ApplicationController) to co trzeba zrobić? Przerzuć metodę find_cart do ApplicationController.
25: <%= link_to ‘Załóż konto’, :controller => :login, :action => ‘add_user’ %>[/code]
Jak tak dalej pójdzie to niedługo będę musiał przenieść wszystko
Jeszcze przyszła mi taka myśl do głowy, że może zamiast osobnego kontrolera login, zrobić wszystko w store? Nie wiem czy nie będzie trochę zamieszania z tym, ale przynajmniej powinno wszystko działać.
Słuchaj, ja Ci mogę pomóc bo lubię to robić. Ale będziemy tak bez końca. To o co pytasz to podstawy. Weź książkę do ręki, czytaj i ucz się. Inaczej szkoda mojego (czy też innych forumowiczów) i Twojego czasu.
Wszystko z layoutem już działa tak jak chciałem. Dzięki za wszelkie uwagi.
Mam teraz taki problem.
Mam dwie tabele users i orders. W tabeli orders jest user_id. W modelach mam zdefiniowane relacje. Przed złożeniem zamówienia użytkownik musi się zalogować i dane przechowywane są w sesji.
W jaku sposób mam pobrać user_id z sesji i wstawić go do tabeli orders?