我使用以下设置来做一个“现场搜索”与涡轮帧。
# index.html.erb
<%= form_with(url: tools_path, method: :get, data: { turbo_frame: :tools }) do |form| %>
<%= form.text_field :query, placeholder: "Search tools...", oninput: "this.form.requestSubmit()" %>
<% end %>
<%= turbo_frame_tag :tools do %>
<ul role="list">
<%= render partial: "tool", collection: @tools %>
</ul>
<% end %>
# tools_controller.rb
def index
if params[:query].present?
@tools = current_user.tools.search(params[:query]).distinct
else
@tools = current_user.tools.order(created_at: :desc)
end
end
# tool.rb
scope :search, -> (query) do
return if query.blank?
joins(:categories).where("tools.name ILIKE :query OR brand ILIKE :query OR notes ILIKE :query OR part_number ILIKE :query OR categories.name ILIKE :query", query: "%#{query}%")
end
当有结果时,它工作得很好,但如果没有任何结果,它会在浏览器中显示“内容缺失”错误。
<turbo-frame id="tools" src="https://localhost:3000/tools?query=pressure+washer" complete="">
<strong class="turbo-frame-error">Content missing</strong>
</turbo-frame>
我尝试在turbo_frame_tag
中添加@tools.empty?
检查,但似乎没有效果。
不知道还能做什么来调试这个。
沿着运行Rails 7.1.0.alpha和turbo-rails 1.4.0。
1条答案
按热度按时间vhipe2zx1#
如果Turbo无法在响应中找到发起请求的Turbo帧,则通常会出现“内容丢失”错误。根据您的代码,我认为问题在于没有结果时没有呈现
turbo_frame_tag
。要解决此问题,您可以尝试以下操作:
将
data-turbo-if="@tools.any?"
属性添加到turbo_frame_tag
。这将告诉Turbo只渲染帧,如果有任何结果。在turbo_frame_tag
中,添加一个<div class="empty-state">No tools found</div>
元素。如果没有结果,则会显示此信息。下面是一个如何执行此操作的示例: