Używam w tabeli postgress hstore, w modulu mam:
store_accessor :acl, :custom_user_ids
Zapisana przykładowa kolumna wygląda tak:
acl: {"access"=>"custom", "custom_user_ids"=>"[\"1\"]"}
Zakładam że postgress zawsze bedzie zapisywał w ten sposób tablice jako string ?
Jak sprawić żeby używając takiego kodu:
let!(:note3){ create :note, access: 'custom', custom_user_ids: [user1.id, user2.id] }
Tworzyło by mi obiekt z poprawnie zserializowanymi custom_user_ids. W tym momencie owszem obiekt jest tworzony, ale pole te są jako zwykły hash a nie json tak jak to robi postgress.
Natomiast w kodzie aplkacji wykonuje zapytania na tych polach, np.
scope :accessible_by_user, lambda {|user| where(
acl @> ('access' => 'public') OR
(acl @> ('access' => 'custom') AND (acl->'custom_user_ids') LIKE '%\":custom_user_id\"%') ",
custom_user_id: user.id)}
(refaktoryzacja tego ostatniego zapytania, zeby nie uzywac LIKE to kolejne pytanie , zna ktoś jakis dobry tutorial do takich postgressowych zapytań ? )