I have a link to an endpoint (GET request).
link_to ship_path(@ship)
# some controller - pseudo code
def show
if all_is_well?
# html response, we don't want to stream in this scenario
redirect_to happy_ship_photos_path
else
turbo_stream "Warning, Are you sure you want to see this?"
end
end
In certain situations, I want the controller to FORCE a turbo_stream response.
Typically, if we want a turbo_stream response, we would decorate our link with a data-turbo-stream
attribute. However, I want the server to FORCE a turbo_stream response, if it is warranted.
I would not want the view layer, in this particular case, to determine whether a turbo_stream is required by attaching the data-turbo-stream
attribute to a link.
Is this possible at all? any alternatives / ideas?
render formats: [:turbo_stream]
There is also a difference if the request is :get or :post because :post makes a turbo_stream request. But the formats argument should override this. You may add also a layout: false for turbo_stream.
Hey I appreciate your response. I’m not sure if I can FORCE a html response, using your proposed method. ,
When i make a PUT request via a form:
- in certain scenarios I WANT a streamed response.
- in other scenarious, I want to FORCE a html response, even though the natural response would be a turbo_stream…is there any way this can be done?
# client_ pseudo_code:
# button_to update_foo_path, method: :patch
# controller psudo_code
def update
if all_is_well?
# (no streaming here). force html response only
format.html and return
else
# but we want streaming here:
turbo_stream and return
end
end
Hi,
please test with a code like that:
def update
if ...
render partial: '.xx.turbo_stream.erb', formats: [:turbo_stream], layout: false
else
render partial: '...xx.html.erb', formats: [:html], layout: false
end
end
Or, if you want to render a template, take the template argument.
And may you have to play with the file suffix, but should work like described.
But the key point should be the formats: [:turbo_stream]
argument.
1 Like
This doesn’t seem to work with the latest version of turbo.