Jak wyselkcjonowac dane z bazy

mam w bazie tabele hosts i w niej zdefionowane hosty [host_id, host_ip , host_mac ,host_type]
host_type może być ap, klient , admin

i hodzi mi aby zwyśietlić liste tylko klientów

w controlerze zdefionowałe tak:

def list_klient @hosts = host.find(:all, :conditions=>['host_type > ?', 'klient']) end
w widoku

<% for host in @hosts %> <%= host.host_ip %> <%= host.host_type %><br /> <% end %>
a w efekcie dostaje błąd

You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

Spróbuj

@hosts = host.find(:all, :conditions=>['host_type = ?', 'klient'])

Api o find

nie rozumiem, wkleiłeś taki sam kod jak ja napisałem

Zauważ różnicę.

faktycznie niedowidze już

nie zmieniło to stytuacji, dalej ten sam błąd

Zakładam, że masz faktycznie w bazie jakieś dane.

Odpal ./script/console i poeksperymentuj z innym sposobem zapisania argumentów do find.
Metod jest kilka - http://api.rubyonrails.com/classes/ActiveRecord/Base.html - dokumentacja nie gryzie.

Błąd nie tkwi w złym warunku metody find. Ponieważ masz jako pierwszy warunek :all to zawsze dostajesz
tablicę (jeśli nie zostanie znaleziony żaden rekord to jest po prostu pusta).

[quote]You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each[/quote]
Wnioskuję, że w ogóle nie opala ci się metoda list_klient w kontrolerze. Podaj nazwę kontrolera oraz adres, który wpisujesz przeglądarce.

kontroler nazywa się hosty
http://192.168.0.1:3000/hosty

i mam domyslni w akcji index przekierowanie do klient_list

def index
list
render :action => ‘list_klient’
end

no to nic dziwnego ze nie dziala :wink:

powinno byc:

def index
list_klient
render :action => ‘list_klient’
end

dzięki, moje przeoczenie