7

Ruby 2/Rails 4 アプリで、acts-as-taggable-on を active_model_serializers と組み合わせて使用​​して、他のモデル パラメーターと共にタグを出力する JSON API を作成しようとしています。

最初に、この問題の背景/動機: JSON は ember/ember-data にフィードされています。この記事の執筆時点では、JSON に埋め込まれたレコードのサポートが削除されています。これに関するドキュメントには修正が想定されていますが、私はそれが不器用であり、実際には機能していません。私は Ember の初心者で、Rails に少し慣れているので、ドキュメント レコードと一緒にタグ レコードをサイドロードすることで、別の方法で問題を解決しようと考えています。私のアプリケーションにとってはより理にかなっているので、このソリューションの方が気に入っていますが、これを機能させることもできません。

以下に例を示します。acts-as-taggable-on を使用するドキュメント モデルがあるとします。

class Document < ActiveRecord::Base
  acts_as_taggable
  # other code omitted

1 つのタグを持つ 1 つのドキュメントでデータベースをセットアップしました。ここで、次のケースを検討します。

1. 完全なオブジェクトの埋め込み: 次のシリアライザーを使用:

class DocumentSerializer < ActiveModel::Serializer
  attributes :id
  has_many :tags

私の JSON の形式は次のとおりです (Rails 4 UUID を使用):

{
  "documents": [
    {
      "id": "c41460fa-2427-11e3-8702-0800270f33f4",
      "tags": [
        {
          "id": "a33fc396-2428-11e3-8eeb-0800270f33f4",
          "name": "test"
        }
      ]
    }
  ]
}

2. ID 埋め込み: シリアライザーの使用

class DocumentSerializer < ActiveModel::Serializer
  attributes :id
  has_many :tags, embed: :id

私の JSON は次のようになります。

{
  "documents": [
    {
      "id": "c41460fa-2427-11e3-8702-0800270f33f4",
      "tag_ids": [
        "a33fc396-2428-11e3-8eeb-0800270f33f4"
      ]
    }
  ]
}

3. タグをサイドロードした ID 埋め込み: active_model_serializers のドキュメントによると、できるはずです。

class DocumentSerializer < ActiveModel::Serializer
  attributes :id
  has_many :tags, embed: :id, include: true

しかし、これは機能しません。代わりに、NoMethodError が発生します。

undefined method `object' for #<ActsAsTaggableOn::Tag:0x007f258cf1db38>

この問題を検索してみましたが、これまでのところ有用なものは見つかりませんでした。また、どちらのgemについても、他のgemとの使用に関するドキュメントを見つけることができませんでした. act-as-taggable-on がどのように実装されているか、それは単純な has_many の関係ではないことに関係があるのではないかと今は疑っていますか? この問題について何か情報を提供できる人はいますか? 前もって感謝します!

4

1 に答える 1