mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
* Merge pull request #1990 from mxie/mx-result-typo Fix typos and capitalization in Relationship Links docs [ci skip] * Merge pull request #1992 from ojiry/bump_ruby_versions Run tests by Ruby 2.2.6 and 2.3.3 * Merge pull request #1994 from bf4/promote_architecture Promote important architecture description that answers a lot of questions we get Conflicts: docs/ARCHITECTURE.md * Merge pull request #1999 from bf4/typos Fix typos [ci skip] * Merge pull request #2000 from berfarah/patch-1 Link to 0.10.3 tag instead of `master` branch * Merge pull request #2007 from bf4/check_ci Test was failing due to change in JSON exception message when parsing empty string * Swap out KeyTransform for CaseTransform (#1993) * delete KeyTransform, use CaseTransform * added changelog Conflicts: CHANGELOG.md * Merge pull request #2005 from kofronpi/support-ruby-2.4 Update jsonapi runtime dependency to 0.1.1.beta6 * Bump to v0.10.4 * Merge pull request #2018 from rails-api/bump_version Bump to v0.10.4 [ci skip] Conflicts: CHANGELOG.md * Merge pull request #2019 from bf4/fix_method_redefined_warning Fix AMS warnings * Merge pull request #2020 from bf4/silence_grape_warnings Silence Grape warnings * Merge pull request #2017 from bf4/remove_warnings Fix mt6 assert_nil warnings * Updated isolated tests to assert correct behavior. (#2010) * Updated isolated tests to assert correct behavior. * Added check to get unsafe params if rails version is great than 5 * Merge pull request #2012 from bf4/cleanup_isolated_jsonapi_renderer_tests_a_bit Cleanup assertions in isolated jsonapi renderer tests a bit * Add Model#attributes helper; make test attributes explicit * Fix model attributes accessors * Fix typos * Randomize testing of compatibility layer against regressions * Test bugfix * Add CHANGELOG * Merge pull request #1981 from groyoh/link_doc Fix relationship links doc Conflicts: CHANGELOG.md
46 lines
1.4 KiB
Markdown
46 lines
1.4 KiB
Markdown
[Back to Guides](../README.md)
|
|
|
|
# How to serialize a Plain-Old Ruby Object (PORO)
|
|
|
|
When you are first getting started with ActiveModelSerializers, it may seem only `ActiveRecord::Base` objects can be serializable,
|
|
but pretty much any object can be serializable with ActiveModelSerializers.
|
|
Here is an example of a PORO that is serializable in most situations:
|
|
|
|
```ruby
|
|
# my_model.rb
|
|
class MyModel
|
|
alias :read_attribute_for_serialization :send
|
|
attr_accessor :id, :name, :level
|
|
|
|
def initialize(attributes)
|
|
@id = attributes[:id]
|
|
@name = attributes[:name]
|
|
@level = attributes[:level]
|
|
end
|
|
|
|
def self.model_name
|
|
@_model_name ||= ActiveModel::Name.new(self)
|
|
end
|
|
end
|
|
```
|
|
|
|
The [ActiveModel::Serializer::Lint::Tests](../../lib/active_model/serializer/lint.rb)
|
|
define and validate which methods ActiveModelSerializers expects to be implemented.
|
|
|
|
An implementation of the complete spec is included either for use or as reference:
|
|
[`ActiveModelSerializers::Model`](../../lib/active_model_serializers/model.rb).
|
|
You can use in production code that will make your PORO a lot cleaner.
|
|
|
|
The above code now becomes:
|
|
|
|
```ruby
|
|
# my_model.rb
|
|
class MyModel < ActiveModelSerializers::Model
|
|
attributes :id, :name, :level
|
|
end
|
|
```
|
|
|
|
The default serializer would be `MyModelSerializer`.
|
|
|
|
For more information, see [README: What does a 'serializable resource' look like?](../../README.md#what-does-a-serializable-resource-look-like).
|