rails - 如何在表单中使用远程true时从JSON响应呈现错误消息

时间:2017-09-27 11:16:41

标签: ruby-on-rails

我已经在SO和几个博客上阅读了几篇帖子,但没有一篇明确说明当您使用:remote => true时如何在视图上呈现错误消息

我确信我不会尝试做以前没做过的事情。

所以我有一张表格

<%= form_for template, url: url, html: {class: 'padding-top-10'}, :remote => true do |f| %>
  <%= f.text_field :name, class: 'form-control', placeholder: 'What is the name of the new role?' %>
  <%= f.submit 'CREATE' , class: 'btn-block btn btn-primary'%>
<% end %>

我想要的只是当我提交表单时,我希望能够在屏幕上为用户显示错误消息。

def add_job_template
  @template  = JobTemplate.new(job_template_strong_params)
  if @template.save
    render json: { success:  'Information has been saved' }}
  else
    render json: { errors:  @template.errors.full_messages }, status: 422
  end
end

现在的问题。 如何在我的视图中显示此successerrors响应?

1 个答案:

答案 0 :(得分:0)

您需要一种方法来处理响应,您可以在消息实例变量中设置一个值,具体取决于是否保存了记录,然后在响应您的方法的js文件中设置,以满足您的需要这个值:

def add_job_template
  @template = JobTemplate.new(job_template_strong_params)
  @message  = @template.save ? 'Template saved' : 'Template not saved'
  respond_to :js
end

然后在您的app / views / templates / add_job_template.js.erb中,您可以显示@message的值:

console.log('<%= @message %>')

如果渲染一个json,你就拥有了所需的数据,但是如果你用js格式进行响应,那么你需要做一些事情,那么它将寻找一个被称为当前方法的js文件。 p>