On Friday, June 27, 2014 5:01:36 AM UTC-7, Nick Sutterer wrote:
>
>
> You mean instead of having to override ::view_context_class in a
> controller you could just extend your ApplicationView class directly?
>
> Nick
>
Didn't hear of ::view_context_class before, but yes, I'd like to be able
to subclass and use the ApplicationView class outside of regular
controllers, while still using all the tools normally only available in the
controller, like helper loading:
class MyRenderer < ApplicationView::Base
end
MyRenderer.render('/users/index')
The above should be as smart as regular view rendering is vis-a-vis which
helpers/contex to load, for example:
- All app route helper methods (_url and _path) should be available
without having to custom-require them.
- The same view paths should be able as those available from regular
controller-base view renders.
- It should load the same helpers that would be available had an action
been rendered from UsersController#index. And custom helpers should be
loadable in same way as in controller:
class MyRenderer < ApplicationView::Base
helper :all
end
Assigns and methods should be settable directly on the renderer:
class MyRenderer < ApplicationView::Base
def initialize(user_id)
super # if needed
@user_id = user_id
@organizations = current_user.organizations
end
def current_user
User.find(@user_id)
end
end
Locals should be passed to render method as usual, and possible to set
defaults from object:
class MyRenderer < ApplicationView::Base
def render(options={})
super.merge(some_local: 'some_value')
end
end
Then, the above renderer can be used anywhere, as well as be serialized and
reused later in places like Delayed Job which doesn't have request context.
In short, bring some reusable, object-oriented niceness to views, without
having to reconfigure everything my app should _already_ know about
(because it's already configured in regular controller-based views)
If there is existing way to do this kind of thing, please do tell.
Thanks.
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.