Witam
Ruby 1.9.2 i rails 2.3.8
Jak dotad to 100% chodzi:
wynik = tabela.find(:first,...)
#TRUE
if wynik
end
To chodzi prawie zawsze:
wynik = tabela.find(:all,...)
#TRUE
if wynik.nil?
end
Oprocz paru wyjatkow (inna tabela bazy) ze dzieje sie tak:
[code]wynik = tabela.find(:all,…)
#FALSE
if wynik.nil?
end
wynik = tabela.find(:all,…)
#TRUE
if wynik.empty?
end[/code]
Czemu tak sie dzieje, pomimo ze wynik jest identyczny patrzac przez <%= debug @wynik %> ?
sevos
November 13, 2011, 9:24am
2
Metoda nil? sprawdza czy obiekt jest NILem.
Pusta tablica zwracana przez find(:all) zdecydowanie nie jest nilem.
Nie ma różnicy, jakiego modelu używasz.
Every expression and every object in Ruby has a boolean value, which means that every object and every expression must either evaluate to true or to false. This makes true and false rather special values. But, they are not just empty value or simple...
seban
November 13, 2011, 10:13am
3
_duszek musisz też mieć świadomość co te metody zwracają.
Model.all
Zwróci zawsze tablicę, która może być pusta lub wypełniona obiektami Model. Model.first
zwróci albo nil albo obiekt Model.
Hitsu
November 13, 2011, 12:58pm
4
tabela.find(:all ...)
Jeśli będziesz korzystać z Rails 3 to ta składnia jest przestarzała i chyba nie zadziała w 3.1.
Powienieneś wtedy przez takiego użyć takiej składni
tabela.all( ...)
Ale ja osobiście bardziej preferuje Model.where(" … ")
zlw
November 13, 2011, 3:17pm
5
najlepiej w railsach sprawdzać to metodą #present ?
[quote=“api.rubyonrails.org ”]#present ?
An object is present if it’s not blank?.
#blank ?
An object is blank if it’s false, empty, or a whitespace string. For example, “”, “ ”, nil, [], and {} are all blank.[/quote]
[code=ruby]model = Model.all #=> []
model.present? #=> false
model = Model.first #=> nil
model.present? #=> false[/code]