Witam
Dopiero zaczynam się uczyć Ruby on Rails i moje pytanie dotyczy różnic w nazewnictwie hashy.
Jeden z przykładów to gdy chcę zrobic update jakiegos zapisu w tabeli bazy danych uzywam metody update_attribute i podaję argumenty w postaci hasha:
Post.update_attribute(:title, "Nowy tytul")
Natomiast jesli chcę wywołać kilka argumentów, czyli zrobic kilka aktualizacji dla kolumn to wpisuję:
Post.update_attributes(title: "Nowy tytul", body: "nowy text")
Pogubiłem sie już całkiem, gdy doszedłem do metody order i argumenty podane jako hash są w postaci takiej jak w Ruby:
Post.order(:title => :desc)
Pytanie… czemu tak wiele różnych zapisow jest w rails, czym one się różnią, dlaczego one się tak różnią
i czy jest gdzies jakiś materiał w którym mogę o tym poczytać? szukałem w dokumentacji, ale nie znalazłem…
Garść linków.
To tak żeby było od czego zacząć Ludzie z większą wiedzą pewnie napiszą więcej
ok czyli po prostu muszę trzymać się dokumentacji i nie ma na to jakiejś konkretnej reguły bez zaglądania do dokumentacji?
Ta metoda przyjmuje dwa argumenty a nie hash argumentów. Nie każda metoda jak widać na powyższym przykładnie ma przekazywanie argumentów w postaci hasha. Dlatego niektóre gemy, frameworki tworzą dokumentacji żeby developerzy wiedzieli jakie argumenty mają przekazać.
[1] pry(main)> { :foo => :bar } == { foo: :bar }
=> true
Druga notacja została wprowadona w wersji 1.9, jeżeli używasz Rubiego 1.9 lub nowszego to obojętnie którą stosujesz, zawsze dostaniesz w rezultacie Hasha.
Z Twojego przykładu zamiast Post.order(:title => :desc)
można z powodzeniem użyć Post.order(title: :desc)
Preferowana jest ta nowsza:
{ foo: :bar }
Bardzo dziękuję za odpowiedzi, sporo mi to wyjaśniło.
Warto dodać że ta nowsza to taki cukier na przypadek kiedy kluczem jest symbol. W hashu jednak klucz może być czymkolwiek, jednak wtedy należy stosować właśnie starą składnię. Przykłady:
{ "foo" => "bar" }
{ Constant => "bar" }
{ 1 => "bar" }