Comments (4)
Hi @kaelumania!
It's not possible right now: there is no way to build polymorphic types and let gem know how to decide what type should be used.
It could work like this (we define polymorphic type and use it in model):
# regular model definition
class Product < ApplicationRecord
attribute :configuration, Configuration.to_array_type
end
class ConfigurationV1
include StoreModel::Model
# ...
end
class ConfigurationV2
include StoreModel::Model
# ...
end
class Configuration
include StoreModel::PolymorphicModel
def self.resolve(json)
json[:version] == '1' ? ConfigurationV1 : ConfigurationV2
end
end
In order to add the support we need to implement StoreModel::PolymorphicModel
and handle it in ArrayType#cast_value
Please let me know if you want to try it out and I'll be happy to help ๐
from store_model.
Thanks for the fast response :) it don't have to be an array type though. I would suggest to use the same naming as for single table inheritance in active record json[:type]
. What do you think about:
# regular model definition
class Product < ApplicationRecord
attribute :configuration, Configuration.to_type, polymorphic: true
end
class ConfigurationV1 < Configuration
# ...
end
class ConfigurationV2 < Configuration
# ...
end
class Configuration
def self.resolve(json)
find_subclass(json[:type])
end
end
from store_model.
Yeah, it definitely should work with a singular associations too. attribute
method is a part of Rails Attributes API so it's hard and errorโprone (in future) to add params to it, that's why I try to pack the logic into the type class as much as possible ๐ Maybe we could allow to build resolve dynamically (by the way, I think it's not even required to be a subclass):
class Product < ApplicationRecord
attribute :configuration, StoreModel.polymorphic { |json| "#{json.type}".constantize }
end
from store_model.
Added in #61
from store_model.
Related Issues (20)
- Validate any Hash HOT 1
- Encrypt attributes HOT 2
- Aliasing an attribute HOT 1
- GraphQL input type fails to cast HOT 4
- ArgumentError: wrong number of arguments (given 1, expected 0) in random model HOT 3
- Assignment Doesn't work in OneOf case HOT 3
- Delegation of `fetch` to `attributes` causes issues HOT 2
- NameError: uninitialized constant StoreModel::Types::ArrayType HOT 3
- Default values for attributes when retrieving the store model HOT 1
- Decoding Custom Types HOT 1
- Allow an option to disallow "UnknownAttributes" behavior HOT 1
- ActiveRecord validation contexts don't propagate HOT 1
- Override methods HOT 3
- Broken defaults in 2.0 HOT 2
- Attribute encryption with ActiveRecord::Encryption HOT 1
- StoreModel Stringifying json when saving. HOT 14
- accepts_nested_attributes_for allow partial updates HOT 2
- [QUESTION] How preserve data on update? HOT 1
- JSON deserializing empty string, leads to nil error
- Optional tracking of parent functionality HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from store_model.