gpt4 book ai didi

turbolinks - 使用热线广播到多个涡轮流

转载 作者:行者123 更新时间:2023-12-05 03:43:39 26 4
gpt4 key购买 nike

我已经正确连接了 hotwire/turbo 以在我页面的一个地方对单个模型进行 crud 操作,但我想在我页面的不同位置同时更新同一个模型出色地。我以为我可以只设置两个流,但它似乎不起作用。

根据我如何命名目标,指定目标确实适用于创建操作,但不适用于更新和销毁。这是我认为应该起作用但不起作用的方法:

----位置 1(“生物”流)----

<div id="creatures">
<%= turbo_stream_from "creatures" %>
<%= turbo_frame_tag "creatures" do %>
<div>
<% @creatures.each do |creature| %>
<div>
<%= render "creatures/creature", creature: creature %>
</div>
<% end %>
</div>
<% end %>
</div>

----位置 2(“creatures_main”流)----

<%= turbo_stream_from "creatures_main" %>
<%= turbo_frame_tag "creatures_main" do %>
<% @creatures.each do |creature| %>
<div>
<%= render "creatures/creature", creature: creature %>
</div>
<% end %>
<% end %>

---- common _creature.html.erb 部分----

<%= turbo_frame_tag dom_id(creature) do %>
<%= link_to creature.name, "#" %>
<% end %>

---- 生物.rb ----

class Creature < ApplicationRecord
validates :name, presence: true

after_create_commit {
broadcast_append_to "creatures"
broadcast_append_to "creatures_main"
}
after_update_commit {
broadcast_replace_to "creatures"
broadcast_replace_to "creatures_main"
}
after_destroy_commit {
broadcast_remove_to "creatures"
broadcast_remove_to "creatures_main"
}

end

当我在我的模型中有两次调用时会发生什么,创建操作将新创建的生物放在位置 1 两次,两次中只有一次被更新,但无论它们在页面上的什么位置,它们都被正确销毁。

最佳答案

creaturescreatures_main 将是流名称。您正在寻找的是 targetpartial 来控制流在何处寻找更新您的数据,以及它将使用哪个部分来更新。

你可以试试:

after_create_commit -> {
# target here is the ID of the outer div, where data would be appended to
broadcast_append_to "creatures", target: "creatures"`
broadcast_append_to "creatures_main", target: "creatures_main"
}
after_update_commit {
# target here is the ID of each of the creature div
broadcast_replace_to "creatures", target: "creature_#{id}"
broadcast_replace_to "creatures_main", target: "creature_main_#{id}"
}
after_destroy_commit {
broadcast_remove_to "creatures"
broadcast_remove_to "creatures_main"
}
<%= turbo_frame_tag "creature_#{creature.id}" do %>
<%= link_to creature.name, "#" %>
<% end %>

<%= turbo_frame_tag "creature_main_#{creature.id}" do %>
<%= link_to creature.name, "#" %>
<% end %>

当然,这意味着如果您在局部中包含 turbo_frame_tag,则可能必须使用 2 个不同的局部。您可以这样做:

after_update_commit {
# target here is the ID of each of the creature div
broadcast_replace_to "creatures", target: "creature_#{id}", partial: "creatures/creature", locals: {creature: self}
broadcast_replace_to "creatures_main", target: "creature_main_#{id}", partial: "creatures/creature_main", locals: {creature: self}
}

顺便说一句,您应该使用这些方法的更新版本。还可以使用渲染集合以便于阅读。

关于turbolinks - 使用热线广播到多个涡轮流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66724921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com