У меня есть две таблицы на основе postgres hstore, entity
и info
, каждая из которых выглядит так:
Column | Type | Modifiers
------------+--------------------------+---------------------------------------------------------------
id | integer | not null default nextval('entity__entities_id_seq'::regclass)
created_at | timestamp with time zone | not null
updated_at | timestamp with time zone | not null
context | hstore | default hstore((ARRAY[]::character varying[])::text[])
data | hstore | default hstore((ARRAY[]::character varying[])::text[])
поэтому запрос в SQL, который я хочу выполнить, выглядит примерно так:
SELECT e.context->'device' AS device, i.data->'location' AS location from entity AS e
LEFT JOIN info AS i ON e.context->'device' = i.context->'device'
WHERE e.data->'type'='chassis
Итак, у меня есть два пути:
- напишите контроллеры rails, ссылающиеся на VIEW в базе данных
- напишите некоторые рельсы, такие как запросы, используя include, join и т. д.
Я действительно предпочел бы сделать последнее. однако я полностью запутался в том, какой код рельсов использовать.
моя модель (я знаю, что мне не хватает belongs_to
и т. д., но я не знаю, как установить связь с полем hstore):
class Device < ActiveRecord::Base
self.table_name = 'entity'
self.primary_key = 'id'
attr_accessible :id, :created_at, :updated_at, :context, :data
serialize :context, ActiveRecord::Coders::Hstore
serialize :data, ActiveRecord::Coders::Hstore
end
class DeviceInfo < ActiveRecord::Base
self.table_name = 'info'
self.primary_key = 'id'
attr_accessible :id, :created_at, :updated_at, :context, :data
serialize :context, ActiveRecord::Coders::Hstore
serialize :data, ActiveRecord::Coders::Hstore
end