Module: Spree::ProductPropertyMetafields
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/spree/product_property_metafields.rb
Overview
Spree 5.4 で Spree::Property が削除されるため、ProductProperty で 保持していた商品の付加情報(gravity_forms / 地図形式 / 提供形態 / short_description 等)を Spree 5.2 の metafields に移行する。その読み書きを一箇所に集約する薄いヘルパー。
移行 rake(migrate_product_properties_to_metafields)は旧 ProductProperty を namespace="properties", key=property.name, value=product_property.value で metafield にコピー済み。したがって本ヘルパーは namespace="properties" 規約のもとで 本家の get_metafield / set_metafield を薄くラップするだけにとどめ、本家 API を再実装しない。
日本語 key("地図形式" 等)は ba_spree/metafield_definition_decorator.rb が 本家 normalizes(parameterize) を無効化済みのため、そのまま通る(再 normalize 不要)。
Constant Summary collapse
- PROPERTY_NAMESPACE =
'properties'.freeze
Instance Method Summary collapse
-
#front_end_property_metafields ⇒ Object
PDP 表示用。namespace="properties" かつフロント表示対象(available_on_front_end)の metafield を、定義の作成順で返す。旧 product_properties.joins(:property).merge(Spree::Property.available_on_front_end) .sort_by_property_position の置き換え。各要素は Spree::Metafield で、name(=表示名) / value / id を持つ。.
-
#property_metafield?(name) ⇒ Boolean
旧 product.has_property? 相当。.
-
#property_metafield_value(name) ⇒ Object
旧 product.property(name) 相当。指定プロパティ名の metafield 値(文字列)を返す。無ければ nil。.
-
#set_property_metafield(name, value) ⇒ Object
旧 product_properties.create!/update 相当。指定プロパティ名の metafield に値を設定する。 MetafieldDefinition は本家 set_metafield 内で find_or_create される。.
Instance Method Details
#front_end_property_metafields ⇒ Object
PDP 表示用。namespace="properties" かつフロント表示対象(available_on_front_end)の metafield を、定義の作成順で返す。旧 product_properties.joins(:property).merge(Spree::Property.available_on_front_end) .sort_by_property_position の置き換え。各要素は Spree::Metafield で、name(=表示名) / value / id を持つ。
39 40 41 42 43 |
# File 'app/models/concerns/spree/product_property_metafields.rb', line 39 def .select { |mf| mf.&.namespace == PROPERTY_NAMESPACE } .sort_by { |mf| mf. } end |
#property_metafield?(name) ⇒ Boolean
旧 product.has_property? 相当。
30 31 32 |
# File 'app/models/concerns/spree/product_property_metafields.rb', line 30 def (name) ((name)) end |
#property_metafield_value(name) ⇒ Object
旧 product.property(name) 相当。指定プロパティ名の metafield 値(文字列)を返す。無ければ nil。
19 20 21 |
# File 'app/models/concerns/spree/product_property_metafields.rb', line 19 def (name) ((name))&.value end |
#set_property_metafield(name, value) ⇒ Object
旧 product_properties.create!/update 相当。指定プロパティ名の metafield に値を設定する。 MetafieldDefinition は本家 set_metafield 内で find_or_create される。
25 26 27 |
# File 'app/models/concerns/spree/product_property_metafields.rb', line 25 def (name, value) ((name), value) end |