Is it possible to render a "sidecar" partial for a ViewComponent?
Let's say I have
class MyComponent < ViewComponent::Base
end
and 2 view files in
app/components/my_component/my_component.html.erb
app/components/my_component/_some_partial.html.erb
In my_component.html.erb
, I want to be able to do:
render "some_partial"
But without a special configuration, that looks under the views directory for said partial. I don't want to extract that partial to its own component, nor do I want it floating by itself in the view directory.
The first step is to tell Rails it can look for templates in the view components directory
class ApplicationController < ActionController::Base
append_view_path "#{Rails.root}/app/components"
Keep in mind that view contexts are based on the currently executing controller, so <%= render :some_partial %>
in a PostsController
(even within a ViewComponent
class) will look for a partial in a subdirectory /posts or /application.
To make sure Rails finds your partial, use an absolute path when you render it:
<%= render "/my_component/some_partial" %>
Hat tip to Roli in the StimulusReflex discord