当我使用delete方法更新超级堆栈模型中的has_many关系时,关联不会在数据库中更新,关联只在前端被删除。
我已经安装了rails -超级堆栈创业板'edge‘分支,在rails 5.1.7上
在此代码中的主组件中,当单击页面中的数字时调用Agent#deassign( number )。
我试图在此代码中使用Agent#deassign(number)方法中的delete方法来删除与某个问题的关联。
app\hyperstack\components\main.rb
class Main < HyperComponent
before_mount do
@current_agent = Agent.first
end
render(UL) do
@current_agent.issues.pluck(:number).each do |num|
LI do
num.to_s
end
.on(:click) do
@current_agent.deassign(num)
end
end
end
endapp\hyperstack\models\issue.rb
class Issue < ApplicationRecord
belongs_to :agent
endapp\hyperstack\models\agent.rb
class Agent < ApplicationRecord
has_many :issues
def deassign(number)
issue_to_deassign = issues.detect { |issue| issue.number == number }
issues.delete(issue_to_deassign)
end
endapp\db\schema.rb
...
create_table "agents", force: :cascade do |t|
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
...
create_table "issues", force: :cascade do |t|
t.integer "number"
t.integer "agent_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["agent_id"], name: "index_issues_on_agent_id"
end该问题将从前端的agent.issues数组中删除,并按预期从页面中消失。
但是关联不会意外地在数据库中更新,当我重新加载页面时,这个数字会重新出现。
发布于 2019-09-08 03:05:14
与普通的服务器端ActiveRecord API不同,您需要显式保存已删除的项。
issues.delete(issues_to_deassign).save为什么?问题是删除一个项目意味着数据库的保存将会发生。由于浏览器必须与服务器异步,Hyper堆栈返回对任何更新数据库的AR方法(即保存、更新、创建等)的承诺。然后,当数据库更新完成时,承诺将得到解决。然而,期望
delete方法返回刚刚删除的对象,因此我们有一个矛盾。因此有3种设计选择。。
save到末尾),而不牺牲灵活性。https://stackoverflow.com/questions/57830656
复制相似问题