Method: MetaField::ModelExtension::ClassMethods#meta

Defined in:
lib/meta_field/extension.rb

#metaObject

meta_join でメタ属性での絞り込みを行う際にArelっぽく標記するために使うProxyを得るメタ属性は単純なカラム名で扱うことができないため、Proxyを通して操作する

Book.meta_join(:subtitle: Book.meta[:subtitle].matches_any(['%KEYWORD1%', '%KEYWORD2%']))
# => SELECT "books".*
#    FROM "books" INNER JOIN (
#      SELECT "obj_id" as "note_obj_id", "text" as "note"
#      FROM "meta_field_metas"
#      WHERE
#        "meta_field_metas"."obj_type" = 'Book' AND "meta_field_metas"."basename" = 'note' AND
#        ("meta_field_metas"."text" LIKE '%HOGE%' OR "meta_field_metas"."text" LIKE '%FUGA%')
#    ) ON "books"."id" = "note_obj_id"

Author.meta_join(:age: Author.meta[:age].gt(20).and(Author.meta[:age].lt(40))).order(:age)
# => SELECT "authors".*
#    FROM "authors" INNER JOIN (
#      SELECT "obj_id" as "age_obj_id", "integer" as "age"
#      FROM "meta_field_metas"
#      WHERE
#        "meta_field_metas"."obj_type" = 'Author' AND "meta_field_metas"."basename" = 'age AND
#        "meta_field_metas"."integer" > 20 AND "meta_field_metas"."integer" < 40
#     ) ON  "authors"."id" = "age_obj_id"
#     ORDER BY age


160
161
162
# File 'lib/meta_field/extension.rb', line 160

def meta
  MetaField::MetaProxy.new(self)
end