Showing app/views/items/_form.rhtml where line #11 raised:
[quote]You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occured while evaluating nil.inject[/quote]
Jedna ze zmiennych jest NILem (zdaje się że @categories) - nie została zainicjalizowana, a Ty (pośrednio) odwołujesz się do metody inject na tej zmiennej (kolekcji). Sprawdź, czy na pewno ustawiasz tą zmienną w kontrolerze.
Jak widzicie dopiero się uczę robie aplikacje ToDo z tutoriala za rączkę. Już w samym tutku było parę błędów/literówek i niejasności, ale do tej pory rozwiązywałem je bez problemu. Z tym już nie mam pojęcia, ponieważ moja wiedza na temat Railsów się skończyła (właściwie jej brak )
Ok, w tabeli masz jakieś kategorie, ale to o niczym jeszcze nie świadczy. Czy w akcji ‘new’, kontrolera ‘items’ masz coś takiego:
@categories = Category.find(:all)
Bo atrybut @categories sam się niczym nie wypełni ;).
I zaglądnij jeszcze do logów (katalog log/), tam prawdopodobnie jest coś więcej niż “You have a nil object when you didn’t expect it!”, a także dokładniejszy trace niż ten wyrzucony do przeglądarki.
[/quote]
Tak jak pisze Radarek, musisz pobrać jakieś dane z BD i umieścić je w @categories find(:all), find_all jak wolisz. Tylko nie wpisuj tego w widoku, w kontrolerze będzie lepiej.
Czemu na sztywno wpisujesz <select … >?
<%= select :item, :category, Category.find(:all).collect { |c| [c.name, c.id]} %> powinno lepiej wyglądać
@radarek - dzięki pomogło. Tak jak już powiedziałem - zaczynam, stąd te moje podstawowy błędy. Ale na pewno szybko się uczę. Studiuję informatykę na UŚ, więc do takich rzeczy zostałem stworzony
@seban - faktycznie także i taka wskazówka pomogła po lekkich poprawkach w Twoim kodzie. Trochę inne nazwy formularza się otrzymuje, ale znacznie skraca to kod. Dzięki - zapamiętane
to mam obiekt nil, którego się nie spodziewałem
No ok, to chciałem poprzez if() rozróznić nil, i pełne wartości
<% if metod.image='' %>
<%= image_tag(metod.image, :size => "35x35", :border => 0) %>
<% else %>
Ala
<% end %>
i
<% if metod.image=nil %>
<%= image_tag(metod.image, :size => "35x35", :border => 0) %>
<% else %>
Ala
<% end %>
Ale on tak czy siak - czy pobrał jakąś wartość, czy nie to wyświetla obrazek
Może on z bazy zwraca string “NULL” (albo “‘NULL’” jak mi się zdarzało przy niektórych testach przy SQLite…) zamiast zwykłego nila.
Spróbuj po prostu wypisać wartość tego pola dla jakiejś wartości, która nie ma przypisanego obrazka.
[quote=BlueMan]<% if metod.image=nil %>
<%= image_tag(metod.image, :size => "35x35", :border => 0) %>
<% else %>
Ala
<% end %>
Ale on tak czy siak - czy pobrał jakąś wartość, czy nie to wyświetla obrazek :/[/quote]
czy w php (bo rozumiem, że to Twój poprzedni język) można zrobić “if metod.image=nil” ? lub inaczej postawione pytanie: po co Tobie przy if przypisanie?
spróbuj
przy wartości NULL, zwracany jest nil, w MySQLu, specjalnie dla Ciebie sprawdziłem.
dla testów użyj ./script/console Twojej aplikacji
[quote=BlueMan]BTW
Railsowe ‘nil’ to to samo co NULL? Że też chciało im się zmieniać/wprowadzać nowe nazewnictwo…[/quote]
jak to? to gdzieś jest inaczej niż nil? to są inne języki niż Ruby? że też komuś się chciało tworzyć inne języki programowania ;p