0

在 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
4

0 回答 0