如何在覆盖控制器后,在activeadmin表单中显示错误

6

我有一个情况需要在activeadmin中覆盖create功能。我自动填充字段,如果数据已经存在,就应该更新,否则就创建。以下是我的create方法:

def create
      id = params[:company].dig(:id)
      if id.present?
        @company = Company.find(id)
        if @company.update(permitted_params[:company])
          redirect_to resource_url
          flash[:notice] = 'Company created successfully'
        else
          #add errors to semantic errors
        end
      else
        new_permitted_params = permitted_params[:company].except(:id)
        @company = Company.new(new_permitted_params)
        @company.save
        if @company.errors.any?
          #add this to semantic errors so that activeadmin handles and displays the errors
        end
     end
  end

我希望能够展示违反验证规则的错误,以便用户知道是否输入了无效内容。
我发现了这个链接,但它看起来更像是一个解决方法而不是一个解决方案。请帮助我解决这个问题。
提前感谢您的帮助。
2个回答

5
我在视图文件夹中创建了一个名为new.html.arb的新HTML文件,并添加了insert_tag renderer_for(:new)。之后我所做的全部工作都是:
if @company.errors.any?
  render 'new'
end

我是通过观察activeadmin的默认行为发现了这一点。希望这能帮助其他想要做类似事情的人。这是我得到的结果,也是我所需要的。

Fields with validation errors.


在调用 render :new 之前,您可能需要设置 @resource = @company - Ali Ghanavatian

0

我在想,如果客户端逻辑根据id.present?来提交不同的URL,是否会使事情更加符合RESTful原则。


让我简单解释一下为什么我这样做。我在这个表单上应用了自动完成功能,并将所有字段设置为我接收到的数据。这就是逻辑发挥作用的地方。如果ID已设置(如果我没有在自动完成中选择对象,则不会设置),则进行更新,否则进行创建。 - UsamaMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接