如何从PostRevisor模块中引发错误并将其呈现给用户?

这里有一段代码,我想添加一些额外的验证

(简化的代码和用例)

# 防止非管理员更改主题的类别
  PostRevisor.track_topic_field(:category_id) do |tc, category_id|
    if tc.guardian.is_staff?
      tc.record_change('category_id', tc.topic.category_id, category_id)
      tc.topic.category_id = category_id
    else
       tc.topic.errors[:base] << "您不能更改此类型主题的类别"
    end
  end

这将阻止非管理员更改类别,但不会向上冒泡错误。

这曾经有效:

但该插件后来已被存档。

这个需求应该得到 API 的支持吧?

你在这方面比我擅长,但我认为 Rails 不需要将此反馈上去,因为人们预期 Ember 不会让用户选择一个用户不应选择的类别。所以也许可以确保前端阻止他们更改类别,如果他们不应该这样做的话,这样 PostRevisor 就永远不会面临这种不舒服的情况?

是的,当然,这是一个考虑因素。

首先在 API 端限制,然后如果可以的话在前段限制,这是个好习惯——也就是说,你不应该只依赖前端来阻止非法操作。

此外,前端 应该 冒泡 Active Record 错误。

因此,在 API 中执行此操作很重要。

同意。您希望 Rails 强制执行它。

我以为我明白它正在强制执行要求并且拒绝进行更改,但只是没有向前端提供足够好的错误。

是的,你说得对。

我只是想阻止类别更改,所以用户界面有点无用,因为它被设计成允许你更改所有元数据,或者根本不更改。

因此,一个冒泡的错误将非常有用。

.gjs 模板的僵化使得这类更改现在非常棘手。

这个模板仍然是 hbs,但出于显而易见的原因,我不想覆盖它。

我将尝试一个 CSS 技巧。

同样,你在这方面比我强,但我认为隐藏类别选择器是可能的看起来行不通。

所以也许应该做的是修改类别序列化器,使其不发送任何类别。不过,这似乎很棘手,因为你需要弄清楚如何在编辑主题时修改它,而不是在创建主题时修改。

“Hack”成功了 :tada: :

我仍然希望服务器能给出一个详细且合理的响应,特别是能利用Active Record的响应。

我也遇到了这种行为,而且不知所措。我所有的开发和测试都通过 API 请求进行,因为我还没有前端,所以当收到的响应看起来像成功时,我感到很困惑。我以为我的守卫根本不起作用,直到我拼凑了一个最小的调试器并艰难地通过了步进器。

编辑:
嗯……决定给我的环境进行一次彻底的重启,它就开始在 API 响应中返回错误消息了。