Wpis z mikrobloga

#ruby #rails

Ok, wiadomo wszystkim, że w ruby

a = false or true
b = false || true
daje

a == false
b == true
To dlaczego u licha

<%= post.owned_by? current_user %>
<%= current_user.admin? %>
<%= post.owned_by? current_user || current_user.admin? %>
wyświetla mi
false true false?

Zresztą powyższe nie ma w sumie tutaj nic do rzeczy (bo tam chodzi przecież o kolejność wykonywania przypisania i operacji logicznej xD a tu mamy coś innego) ale jak napiszę

<%= post.owned_by? current_user or current_user.admin? %>
to mam true
co tu się dzieje, bo nie ogarniam ;s
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@chilling: nie, nie działa jak and, po prostu słabiej wiąże niż przypisanie. Nawiasami obrazując powyższe to jest tak:

(a = false) or true
b = (false || true)
  • Odpowiedz
@chilling: no trochę śmiesznie, jak człowiek przesiada się z pythona i sobie pisze ory w najlepsze, przekonany, że wszystko jest świetnie xd ale podobno w php jest tak samo jak w ruby w tej kwestii

ale poza tym małym incydentem, to ruby jest słodkie
  • Odpowiedz
@chilling: a co lepsze, to jak sobie odpalisz interaktywny interpreter, to otrzymasz

irb(main):002:0> a=false or true
=> true
irb(main):003:0> a
=> false

co jest jeszcze bardziej zdradzieckie xD
  • Odpowiedz
a w jaki sposób sprawdzasz wartości tych zmiennych? Po prostu je wypiszujesz <% %>?


@chilling: no to są tagi już w htmlowej templatce, tak jak php ?
  • Odpowiedz
@zwei: DOBRA MAM JUŻ

<%= post.owned_by?(current_user) || current_user.admin? %>
nawiasy rozwiązały sprawę, jjb, z jednej strony niepisanie nawiasów przy argumentach metod jest wygodne, ale jak zawsze do czasu
  • Odpowiedz
W Ruby używanie or uznawane jest za złą praktykę. Do tego dozwolone jest pomijanie nawiasów przy przekazywaniu argumentów do funkcji, ale lepiej ich używać, żeby uniknąć takich kwiatków :)
  • Odpowiedz