Comments (4)
This comment is a bit late, but I thought I'd add a solution that didn't involve forking. As mentioned by angelim, it's possible to create an ApplicationDecorator in order to add the methods necessary to add decorator methods to json. This is what mine looks like (it's more or less a complete copy of angelim's code)
class ApplicationDecorator < Draper::Decorator
def as_json(options = {})
as_decorated_json(options)
end
def to_json(options = {})
as_json(options)
end
def as_decorated_json(options = {})
model.as_json(options).merge(decorated_attributes(options))
end
def decorated_attributes(options = {})
method_names = Array.wrap(options[:decorated_methods]).map { |n| n.to_s if respond_to?(n.to_s) }.compact
Hash[method_names.map { |n| [n, send(n)] }].tap do |attrs|
decorate_relations(attrs, options) if options[:decorated_include]
end
end
def add_decorated_methods(options, method_names = [])
options[:decorated_methods] = options[:decorated_methods] ? options[:decorated_methods] : []
options[:decorated_methods].concat method_names
end
end
Note the last method. This is useful if you want to make the model always render certain decorator methods in json. E.g.
class ModelDecorator < ApplicationDecorator
delegate_all
def my_decorator_method
names[0]
end
def as_json(options = {})
add_decorated_methods options, [:my_decorator_method]
super options
end
end
from draper.
This seems like pretty good advice, but it's not really an issue. How about adding a section about this to the README?
Since this isn't exactly a bug, I'm closing. Still good to have this text here, at least, thanks for writing it up. Always good to help future Googlers.
from draper.
I would like to add my decorator methods to the generated json. Is the best way to do that by using the fork from @angelim?
thx!
from draper.
I believe so, yes.
from draper.
Related Issues (20)
- Create unique context for each item in a collection?
- Draper is incompatible with Ruby 3 HOT 5
- Draper changes the behaviour of url_for when using STI models
- Sending problematic method names (open, format) to decorated rails objects sends to Kernel (conflicts with ransack)
- undefined method `auto_link' for spec with type :decorator
- Generators don't work. HOT 3
- Draper::UninferrableDecoratorError (Could not infer a decorator for Document.) HOT 3
- CI: A test MAY fail with NameError: uninitialized constant ActionMailer::Base
- Release new version HOT 7
- Breaks respond_with in Rails API apps HOT 2
- ArgumentError using helpers with Ruby 3 HOT 4
- Mongo error -> Uninitialized constant ActiveRecord Did you mean? ActiveModel HOT 1
- Usage with `Turbo::Broadcastable` HOT 1
- undefined method `attributes' for nil:NilClass
- Automatically use decorated associations in delegate methods HOT 1
- Unexpected behavior when `frozen?` method is defined in model HOT 1
- Scaffold generator: Invalid path when using --model-name=Record
- Draper still actively maintained? HOT 12
- Rails - STI bug for ActiveRecord_Relation, works fine for a single record
- issue with using draper outside of controller/view context within a rake task or (active)job
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 draper.