Ember: error.messages не показывает ошибки сервера при сохранении
При попытке создать новую запись errors.messages
не отображать, как описано в документации. Тем не менее, консоль выдает ошибку 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 ответ
Документы Ember Data устарели, они пытаются завершить работу над 1.0. Вы должны использовать ActiveModelAdapter
(не RESTAdapter):
App.ApplicationAdapter = DS.ActiveModelAdapter;
И возвращенный JSON должен быть таким
{
errors:
{
foo:'The world is ending!',
bar:'Error Error Error'
}
}
И желательно, чтобы каждое ваше утверждение было заключено в
{{#if errors}}
{{#each errors.messages}}
{{/each}}
{{/if}}
Вот пример, нажмите "Сохранить" с пустыми полями:
http://jsbin.com/motuvaye/24/edit
Кроме того, вы можете расширить адаптер остальных и добавить туда функциональность, о которой я говорил здесь: свойство ошибок модели данных Ember (DS.Errors) не заполняется