Ember:error.messages在保存时不显示服务器错误

时间:2014-06-01 00:33:20

标签: ruby-on-rails-4 ember.js active-model-serializers

尝试创建新记录时,errors.messages不会呈现为described in the docs。也就是说,控制台确实呈现错误Error: The backend rejected the commit because it was invalid: {email: has already been taken}

我的ember-cli应用中有以下内容:

路由器

Router.map ->
  this.route 'users/new', path: '/signup'

路线

UsersNewRoute = Ember.Route.extend(
  model: ->
    return @store.createRecord('user')
)

控制器

UsersNewController = Ember.ObjectController.extend(
  actions:
    save: ->
      @get('model').save()
)

模板

<h2>Sign up!</h2>
<form {{action 'save' on='submit'}}>
  <label for="email">Email</label>
  {{input id='email' type='email' placeholder='Enter Login' value=email}}
  <label for="password">Password</label>
  {{input id='password' placeholder='Enter Password' type='password' value=password}}
  <button type="submit">Sign Up</button>
</form>

{{#each errors.messages}}
  <p>{{message}}</p>
{{/each}}

在服务器上,我使用AMS和以下控制器:

class UsersController < ApplicationController

  def index
    @users = User.all
    render json: @users
  end

  def show
    @user = User.find(params[:id])
    render json: @user
  end

  def create
    user = User.new(permitted_params(params[:user]))

    if user.save
      render json: user
    else
      render_validation_errors user.errors
    end
  end

  private

  def permitted_params(params)
    params.permit(:email, :password)
  end

  def render_validation_errors errors
    render json: {errors: errors.to_h}, status: 422
  end

end

我做错了什么?

1 个答案:

答案 0 :(得分:2)

Ember Data文档已过时,他们正忙着尝试完成1.0。您必须使用ActiveModelAdapter(而不是RESTAdapter):

App.ApplicationAdapter = DS.ActiveModelAdapter; 

返回的json应该是这样的

 {
    errors:
    {
       foo:'The world is ending!',
       bar:'Error Error Error'
    }
 }

最好你应该用if

包装你的每个语句
{{#if errors}}
  {{#each errors.messages}}

  {{/each}}
{{/if}}

以下是一个示例,单击“保存”并将字段留空:

http://jsbin.com/motuvaye/24/edit

此外,你可以扩展其余适配器并在那里添加功能,我在这里谈到它:Ember Data model's errors property (DS.Errors) not populating