Trong ứng dụng Ruby 2/Rails 4, tôi đang cố gắng sử dụng các hành vi như thẻ có thể kết hợp với active_model_serializers để tạo JSON API sẽ xuất thẻ của tôi cùng với các thông số mô hình khác.Lỗi tải trước JSON cho các thẻ hoạt động như thẻ có thể gắn thẻ bằng cách sử dụng các trình tuần tự hóa mô hình hoạt động
Trước tiên một số nền/động lực cho vấn đề này: JSON đang được đưa vào dữ liệu ember/ember, tính đến thời điểm viết bài này đã xóa hỗ trợ cho các bản ghi được nhúng trong JSON. Có một sửa chữa được cho là trong số documentation về điều này, nhưng tôi thấy nó vụng về và cũng không thực sự làm cho nó hoạt động. Vì tôi là một người mới chơi Ember và cảm thấy thoải mái hơn với Rails, tôi nghĩ tôi sẽ cố giải quyết vấn đề theo cách khác, bằng cách tải lại bản ghi thẻ cùng với hồ sơ tài liệu. Tôi thích giải pháp này tốt hơn vì nó có ý nghĩa hơn cho ứng dụng của tôi, nhưng tôi cũng không thể làm được điều này.
Dưới đây là một ví dụ: Giả sử tôi có một mô hình tài liệu được sử dụng hành vi-as-taggable-on:
class Document < ActiveRecord::Base
acts_as_taggable
# other code omitted
tôi đã thiết lập cơ sở dữ liệu với một tài liệu với một thẻ. Bây giờ chúng ta xem xét các trường hợp sau:
1. Full Object Nhúng: Với serializer sau:
class DocumentSerializer < ActiveModel::Serializer
attributes :id
has_many :tags
JSON của tôi có định dạng sau (sử dụng Rails 4 UUIDs):
{
"documents": [
{
"id": "c41460fa-2427-11e3-8702-0800270f33f4",
"tags": [
{
"id": "a33fc396-2428-11e3-8eeb-0800270f33f4",
"name": "test"
}
]
}
]
}
2. ID Nhúng: Sử dụng bộ nối tiếp
class DocumentSerializer < ActiveModel::Serializer
attributes :id
has_many :tags, embed: :id
JSON của tôi bây giờ trông giống như:
{
"documents": [
{
"id": "c41460fa-2427-11e3-8702-0800270f33f4",
"tag_ids": [
"a33fc396-2428-11e3-8eeb-0800270f33f4"
]
}
]
}
3. ID Nhúng với Tags tải hai chiều: Theo tài liệu active_model_serializers, tôi sẽ có thể làm
class DocumentSerializer < ActiveModel::Serializer
attributes :id
has_many :tags, embed: :id, include: true
nhưng điều này không làm việc . Thay vào đó, tôi nhận được NoMethodError:
undefined method `object' for #<ActsAsTaggableOn::Tag:0x007f258cf1db38>
Tôi đã thử tìm kiếm sự cố này nhưng chưa tìm thấy bất kỳ điều gì hữu ích cho đến thời điểm này. Tôi cũng không thể tìm thấy bất kỳ tài liệu nào về đá quý liên quan đến việc sử dụng với đá quý khác. Sự nghi ngờ của tôi lúc này là nó có cái gì đó liên quan đến cách thực hiện hành vi-như-taggable-on, rằng nó không phải là một mối quan hệ đơn giản? Có ai có thể cung cấp một số đầu vào về vấn đề này? Cảm ơn trước!
Tôi có thể yêu cầu bạn làm thế nào để xử lý mối quan hệ với ember? Làm cách nào để bạn thêm thẻ vào tài liệu? CreateRecord? –