我有一个表单设置为(remote:true通过ajax提交),用户可以在其中输入他们的电子邮件和邮政编码。如果记录得到模型验证并成功保存,则触发一个javascript脚本,相应地更改dom以通知用户成功。但是,如果记录未通过验证,我希望通过json从服务器返回错误并将其显示在表单附近的div中。但是我不能让“else”部分循环工作并让json在视图上呈现。
在chrome dev工具中,当我尝试提交一个空白表单时,我返回状态200并且响应是
{"email":["is invalid"],"zip":["is not a number","is too short (minimum is 5 characters)"]}"
但是我如何才能从控制器中获取这些错误以显示在视图中?
控制器---------------------------------------------- - >
class EngagesController < ApplicationController
def now
@sub = Subscriber.new
end
def create
@sub = Subscriber.new(subscriber_params)
respond_to do |format|
if @sub.save
format.html { render 'now', notice: 'User was successfully created.' }
format.js {}
else
format.json { render :json => @sub.errors }
end
end
end
private
def subscriber_params
params.require(:engage).permit(:email, :zip)
end
end
模型---------------------------------------------- ------&GT;
class Subscriber < ActiveRecord::Base
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z] {2,})\z/i
validates :zip, numericality: {only_integer: true}, length: {minimum: 5}
end
答案 0 :(得分:1)
使用
代替渲染json format.js { render 'errors', errors: @subs.errors }
您需要编写名为errors.js.erb的视图文件,其中您将使用JavaScript代码显示错误。