【问题标题】:How to render error messages for a json form in Rails如何在 Rails 中为 json 表单呈现错误消息
【发布时间】:2016-07-06 20:20:54
【问题描述】:

我正在尝试在 ajax 表单上显示提交失败的错误消息。我以前没有走 ajax 表单的道路,也找不到可靠的最新指南,说明如何获取错误消息以显示表单何时因任何原因无法保存数据。

我在控制器中有format.json { render :json => { :errors => @key.errors.full_messages }, :status => 422 } 用于提交失败的表单,如下所示。但我不知道应该有什么 JS 或咖啡脚本,所以会显示错误消息。

category_item_keys 控制器

def new
   @guide      = Guide.friendly.find params[:guide_id]
   @category   = Category.friendly.find params[:category_id]
   @key        = @category.category_item_keys.new
end


def create

    @guide      = Guide.friendly.find params[:guide_id]
    @key        = @category.category_item_keys.new key_params
    @category   = Category.friendly.find params[:category_id] 


 if @key.save

    CategoryItemKey.find(@key.id).update(submitted_by: current_user.id, approved_by: current_user.id, guide_id: @guide.id)

    respond_to do |format|

     format.html {  redirect_to new_guide_category_category_item_key_path(@guide, @category)
              flash[:success] = "Key added successfully!"  }

     format.json { render :json }
     format.js 

     end

 else
    respond_to do |format|
      format.html {  render 'new' }
      format.json { render :json => { :errors => @key.errors.full_messages }, :status => 422 }
    format.js 
   end
 end

end

def key_params
   params.require(:category_item_key).permit(:name, :key_type)
end

new.html.erb

<%= form_for([@guide, @category, @key], url: guide_category_category_item_keys_path, remote: true, :authenticity_token => true) do |f| %>
   <%= render 'shared/error_messages', object: f.object %>

   <%= f.label :name, "Key name" %>
   <%= f.text_field :name %>

   <%= f.select :key_type, [['Stat', 1], ['Attribute', 2], ['Image', 3], ['Text', 4]] %>

   <%= f.submit "Next"  %>
<% end %>

category_item_key.coffee

# No idea what is needed in here

我已经阅读了我能找到的所有帖子,以了解 category_item_key.coffee 中的内容,但它们都是 3 到 5 岁,只是不起作用。我确信它没有那么复杂,但我对 JS 了解不多。

【问题讨论】:

    标签: javascript ruby-on-rails json ruby-on-rails-4 coffeescript


    【解决方案1】:

    category_item_keys 控制器:

    format.json { render :json => @key.errors, :status => 422 }
    

    _save.js.erb

    <% if @key.errors.any? %>
      $("<%= j(render 'shared/error_messages') %> ").prependTo('#YoursFormId');
    <% else %>
      // do something when no errors
    <% end %>
    

    创建.js.erb,更新.js.erb

    <%= render 'save' %>
    

    【讨论】:

    • 谢谢 你能提供更多细节吗?就像 new.html.erb 中可能需要做的一样。我添加了文件并更改了控制器中的行,但它什么也没做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2018-03-27
    • 1970-01-01
    • 2013-02-03
    • 2013-01-24
    相关资源
    最近更新 更多