Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rendering a partial from Draper Decorator

I have a decorator that returns either a string, or a collection.

In my view, I want to display the return of this decorator method.

class MyDecorator < Draper::Decorator
  def stuff
    if condition
      'some string'
    else
      render model.some_collection
    end
  end
end

Now in my view I want to render the string if it's a string, or render the collection.

= my_object.stuff

Unfortunately I cannot access the render method inside Draper::Decorator. Thoughts?

like image 564
ardavis Avatar asked May 24 '13 16:05

ardavis


2 Answers

From https://github.com/drapergem/draper#accessing-helpers:

Normal Rails helpers are still useful for lots of tasks. Both Rails' provided helper and those defined in your app can be accessed via the h method

So, replace render with h.render and it should work fine.

like image 119
Justin Thomas Avatar answered Sep 17 '22 12:09

Justin Thomas


you can include Draper's Draper::LazyHelpers module inside the decorator to use the ActionView::Helpers and the rest of ActionView as you've always have with views.

like image 41
Kevin_L22 Avatar answered Sep 17 '22 12:09

Kevin_L22