Mam konfigurację RoR + MySQL. W bazie danych znajduje się pole Tinyint t. Kiedy czytam wartość t z Railsów, otrzymuję true lub false, ponieważ pole Tinyint jest interpretowane przez Railsy jako logiczne. Jak na razie dobrze.

Jak odczytać to pole t jako rzeczywistą liczbę całkowitą z Railsów?

2
TTT 30 sierpień 2012, 17:08

2 odpowiedzi

Najlepsza odpowiedź

http://apidock.com/rails/ActiveRecord/AttributeMethods/BeforeTypeCast/attributes_before_type_cast

Na przykład:

Model.first.attributes_before_type_cast['your_boolean_field']

To zależy od twojej bazy danych, jaka wartość zostanie zwrócona, w postgesql jest to 'f' lub 't'

5
sumskyi 30 sierpień 2012, 17:30

Aby oprzeć się na odpowiedzi @sumskyi, jeśli zawsze uzyskujesz dostęp do tego pola jako zwykłej liczby całkowitej, możesz po prostu nadpisać wbudowaną metodę modelu i oszczędzić sobie urazu związanego z powtarzalnym ruchem:

class GroceryStore < ActiveRecord::Base
  # rating is a TINYINT column
  # we just redefine the method here to return the value cast how we want it
  def rating
    self.attributes_before_type_cast['rating'].to_i
  end
end

Teraz, jeśli wywołasz grocerystore.rating, otrzymasz liczbę całkowitą zamiast wartości logicznej.

2
kael 28 luty 2013, 23:56