如何在模板中渲染错误?

时间:2014-11-07 10:54:50

标签: ruby-on-rails ruby-on-rails-4 ember.js

我正在遵循本指南:http://ember.vicramon.com/chapters/all

到目前为止一切顺利!但是,我试图根据我的Rails模型的验证定义获得Ember验证。到目前为止,这里也很好。

我的代码采用与指示相同的方法:http://emberjs.com/api/data/classes/DS.Errors.html或不?

这是我到目前为止所做的:

应用/控制器/ API / V1 / products_controller.rb

respond_to :json

def create
  product = Product.new product_params

  if product.save
    respond_with :api, :v1, product
  else
    render json: { errors: product.errors }, status: 422
  end

  # respond_with :api, :v1, Lead.create(lead_params)
end

应用/资产/ Javascript角/控制器/ products_new.js.coffee

App.ProductsNewController = Ember.Controller.extend
  actions:
    createProduct: ->
      product = @store.createRecord 'product', @get('fields')
      product.save().then =>
        @transitionToRoute 'product', product

# app/serializers/product_serializer.rb
class ProductSerializer < ActiveModel::Serializer
  attributes :id, :name, :description, :amount_in_cents, :status, :errors
end

应用/资产/ Javascript角/模板/产品/ new.js.emblem

article#product
  h1 New Product

  ul
    each errors.messages in error
      li = error

  /* {{#each errors.messages}} */
  /*   <div> */
  /*     <p class="label label-danger">{{this}}</p> */
  /*   </div> */
  /* {{/each}} */

  form
    fieldset
      dl
        dt: label Name:
        dd: view Ember.TextField value=fields.name

      dl
        dt: label Description:
        dd: view Ember.TextField value=fields.description

      dl
        dt: label Amount in cents:
        dd: view Ember.TextField value=fields.amount_in_cents

      dl
        dt: label Status:
        dd: view Ember.TextField value=fields.status

    fieldset.actions
      input type='submit' value='Create Product' click="createProduct"

我使用空字段提交表单,Firebug控制台返回:422 Unprocessable Entity

这是正常的,但错误没有在模板上显示......有什么想法吗?

1 个答案:

答案 0 :(得分:0)

一位开发人员Alex Speller帮忙解决了这个问题并建议我这样做:

  product.save().then =>
    @transitionToRoute 'product', product
  , =>
    @set 'errors', product.get('errors')

app / assets / javascripts / controllers / products_new.js.coffee

似乎工作!