Rails 7 + Turbo:turbo_stream 响应部分模板的额外数据?
Rails 7 + Turbo: turbo_stream respond with extra data on partial template?
我正在玩 Rails 7 + Turbo,我正在尝试创建一个包含用户列表下拉列表的表单。该表单可以创建一个新的“单位”记录并将用户分配给该单位。该计划创建一个下拉列表,您可以在其中搜索和 select 单位记录的所有者。问题是 turbo stream returns 是一个额外的数据(集合)。我已经检查了网络请求,显然,后端正在发送带有额外数据的模板。我如何在没有这些额外数据且仅 return 部分模板的情况下创建响应?
额外数据
[#<User id: 4, email: "foo@bar.com", created_at: "2022-03-18 13:29:04.813660000 +0000", updated_at: "2022-03-18 13:29:19.397311000 +0000", first_name: nil, last_name: nil, phone: nil, meta: {}, account_id: 2>]
这是完整的回复。
<turbo-stream action="update" target="owner_search_result"><template>
<li
id=user_4
class="hover:bg-blue-600 relative select-none py-2 pl-3 pr-9 text-gray-900 cursor-pointer" id="option-0"
role="option" tabindex="-1">
<span class="block truncate">
</span>
<span class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600">
<svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
<path fill-rule="evenodd"
d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
clip-rule="evenodd" />
</svg>
</span>
<span class="ml-2 truncate text-gray-500">
foo@bar.com
</span>
</li>
[#<User id: 4, email: "foo@bar.com", created_at: "2022-03-18 13:29:04.813660000 +0000", updated_at: "2022-03-18 13:29:19.397311000 +0000", first_name: nil, last_name: nil, phone: nil, meta: {}, account_id: 2>]</template></turbo-stream>
这是用户控制器
def search
keyword = user_params[:keyword] || ""
@users = User.filter_by_email(keyword)
respond_to do |format|
format.turbo_stream do
render turbo_stream: turbo_stream.update(:owner_search_result, partial: 'users/unit_owner', locals: { users: @users })
end
end
end
部分是这个
<%= @users.each do |user| %>
<li
id=<%= dom_id(user) %>
class="hover:bg-blue-600 relative select-none py-2 pl-3 pr-9 text-gray-900 cursor-pointer" id="option-0"
role="option" tabindex="-1">
<span class="block truncate">
<%= user.first_name %>
<%= user.last_name %>
</span>
<span class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600">
<svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
<path fill-rule="evenodd"
d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
clip-rule="evenodd" />
</svg>
</span>
<span class="ml-2 truncate text-gray-500">
<%= user.email %>
</span>
</li>
<% end %>
非常感谢。
替换
<%= @users.each do |user| %>
在你部分的开头
<% @users.each do |user| %>
因为您不想将 each
调用的 return 值呈现到视图中,这是痛苦的用户实例。注意缺少的 =
.
我正在玩 Rails 7 + Turbo,我正在尝试创建一个包含用户列表下拉列表的表单。该表单可以创建一个新的“单位”记录并将用户分配给该单位。该计划创建一个下拉列表,您可以在其中搜索和 select 单位记录的所有者。问题是 turbo stream returns 是一个额外的数据(集合)。我已经检查了网络请求,显然,后端正在发送带有额外数据的模板。我如何在没有这些额外数据且仅 return 部分模板的情况下创建响应?
额外数据
[#<User id: 4, email: "foo@bar.com", created_at: "2022-03-18 13:29:04.813660000 +0000", updated_at: "2022-03-18 13:29:19.397311000 +0000", first_name: nil, last_name: nil, phone: nil, meta: {}, account_id: 2>]
这是完整的回复。
<turbo-stream action="update" target="owner_search_result"><template>
<li
id=user_4
class="hover:bg-blue-600 relative select-none py-2 pl-3 pr-9 text-gray-900 cursor-pointer" id="option-0"
role="option" tabindex="-1">
<span class="block truncate">
</span>
<span class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600">
<svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
<path fill-rule="evenodd"
d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
clip-rule="evenodd" />
</svg>
</span>
<span class="ml-2 truncate text-gray-500">
foo@bar.com
</span>
</li>
[#<User id: 4, email: "foo@bar.com", created_at: "2022-03-18 13:29:04.813660000 +0000", updated_at: "2022-03-18 13:29:19.397311000 +0000", first_name: nil, last_name: nil, phone: nil, meta: {}, account_id: 2>]</template></turbo-stream>
这是用户控制器
def search
keyword = user_params[:keyword] || ""
@users = User.filter_by_email(keyword)
respond_to do |format|
format.turbo_stream do
render turbo_stream: turbo_stream.update(:owner_search_result, partial: 'users/unit_owner', locals: { users: @users })
end
end
end
部分是这个
<%= @users.each do |user| %>
<li
id=<%= dom_id(user) %>
class="hover:bg-blue-600 relative select-none py-2 pl-3 pr-9 text-gray-900 cursor-pointer" id="option-0"
role="option" tabindex="-1">
<span class="block truncate">
<%= user.first_name %>
<%= user.last_name %>
</span>
<span class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600">
<svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
<path fill-rule="evenodd"
d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
clip-rule="evenodd" />
</svg>
</span>
<span class="ml-2 truncate text-gray-500">
<%= user.email %>
</span>
</li>
<% end %>
非常感谢。
替换
<%= @users.each do |user| %>
在你部分的开头
<% @users.each do |user| %>
因为您不想将 each
调用的 return 值呈现到视图中,这是痛苦的用户实例。注意缺少的 =
.