1

ネストされたサブモデルとコレクションがいくつかあるMongoidモデルがあります。Railsaccepts_nested_attributes_for機能を使用して、これらのモデルのコントローラーから属性を設定しました。

親モデルで検証が失敗した場合、親モデル#errorsからのエラーメッセージのみが含まれ、サブモデルは含まれません。

通常、ネストされた各モデルのエラーメッセージは、通常のRailsフォームヘルパーを使用してフォームが再レンダリングされたときに読み取られるため、これは通常は問題になりません。JSONただし、 Backboneアプリで使用するために、1つのオブジェクトのすべてのエラーが必要です。

現時点では、ネストされたすべてのモデルを反復処理し、すべてのエラーコレクションを手動でまとめています。これは面倒ですが、機能します。

私は何かが足りないのですか?もっと簡単な方法はありますか?

4

1 に答える 1

1

RailsでAngular.jsを使用すると同じ問題に遭遇します...ネストされたモデルのすべてのエラーを繰り返し処理せずにこれを回避するより良い方法はないと思います。このモンキーパッチは、1対1の関係でのみ機能する私の現在のソリューションです:

module ActionController
  class Responder
    def json_resource_errors
      def get_error_recursively_from(res)
        Hash[res.errors.map do |key, value|
          if res.send(key).is_a? Mongoid::Relations
            result = get_error_recursively(res.send(key))
          else
            result = value
          end
          [key, result]
        end]
      end

      { :errors => get_error_recursively_from(resource) }
    end
  end
end
于 2013-05-18T13:11:40.547 に答える