在 hyperstack 上,Assignment#destroy 方法仅在第一次试验时以“Bad request”失败,其中 Assignment 是建立“has_many”关系的模型。#destroy 在第二次试验中成功。
我已经安装了'edge' 分支的 rails-hyperstack gem。
我正在尝试通过分配模型在问题和代理模型之间建立多对多关系,如下所示:
class Assignment < ApplicationRecord
belongs_to :agent
belongs_to :issue
end
class Issue < ApplicationRecord
has_many :assignments, foreign_key: :issue_id
has_many :agents, through: :assignments
end
class Agent < ApplicationRecord
has_many :assignments, foreign_key: :agent_id
has_many :issues, through: :assignments
def deassign(number)
issue = issues.find_by(number: number)
assignments.find_by(issue_id: issue.id).destroy.then do |result|
if result[:success]
issues.delete(issue)
return true
end
puts "deassign failed #{result[:message]}"
return false
end
end
end
class Main < HyperComponent
before_mount do
@agent = Agent.first
end
render(UL) do
@agent.issues.pluck(:number).each do |num|
LI { num.to_s }
.on(:click) do
@agent.deassign(num)
end
end
end
end
问题编号列在页面上。
单击一个数字时,会调用 Agent#deassign(number),它会调用 Assignment#destroy。这样,我试图删除超堆栈上的关联,因为在这种情况下不能使用 issues.delete(issue).save。
Assignment#destroy 仅在第一次单击数字时失败。第二次成功,关系删除成功。
#destroy 失败时 chrome 开发者控制台中显示的错误和调用堆栈:
http.rb:193 POST http://localhost:5040/hyperstack/execute_remote 400 (Bad Request)
send @ http.rb:193
post @ http.rb:126
run @ server_op.rb:14
destroy @ isomorphic_base.rb:560
Opal.send @ runtime.self-a59b728…763d.js?body=1:1605
destroy @ instance_methods.rb:161
deassign @ agent.rb:7