2013-03-13 2 views
0

У меня есть 3 модели Persona, утверждение и класс P2c наследуются от класса утвержденияАктивной модель JSON Сериализация рельсов унаследованных модели

class Persona < ActiveRecord::Base 
    # create_table "personas", :force => true do |t| 
    # t.text  "name",  :null => false 
    # t.text  "description" 
    # t.datetime "last_change", :null => false 
    # end 
    has_many :p2cs 
end 

class Assertion < ActiveRecord::Base 
# create table "assertions", :primary_key => "id", :force => true do |t| 
# t.text "rationale", 
# end 
end 

class P2c < Assertion 
#create_table "p2cs", :primary_key => "assertion_ptr_id", :force => true do |t| 
# t.integer "persona_id",   :null => false 
# end 
    belongs_to :persona, :class_name => "Persona", :foreign_key => "persona_id" 
end 

мне нужна помощь, чтобы писать классы сериализации с использованием драгоценных камней active_model_serializers

+2

Serialize в каком формате? JSON и YAML уже запечены в ... – PinnyM

+0

требуется больше контекста. Я просто видел, что вы используете наследование, но не STI: это часть вашей проблемы? –

+0

Hi Pierre, пожалуйста, включите какие-то спецификации (если вы не знаете Test :: Unit или RSpec, это могут быть просто доступные для чтения спецификации, если мы сможем добиться желаемого результата). –

ответ

0

Вашими вопрос не ясен, но я предполагаю, что вы хотите включить p2cs в свою личность. as_json является предпочтительным способом реализации по умолчанию JSON сериализации в рельсах

class Personna < ActiveRecord::Base 
    def as_json(options={}) 
    super({include: [:p2cs]}.merge options) 
    end 
end 

Если ваша проблема заключается в реализации различного поведения для P2c и Assertion, просто реализовать as_json по мере необходимости в каждом из классов.

примечание вы можете обнаружить, что блог о JSon сериализации интересной, поскольку она разъясняет разницу между as_json и to_json: http://jonathanjulian.com/2010/04/rails-to_json-or-as_json/

идея заключается в том, что нам нужно разделить JSon сериализации на два этапа: построить рубин хэш атрибутов (as_json), а затем сериализуйте его (to_json). Таким образом, наследование и перегрузка проще, потому что мы можем просто обработать хэш-код рубина.

1

Я не понимаю ваш вопрос. Но я думаю, что у вас была проблема с вашим ИППП. STI и полиморфизм не объясняются в RailsCast 409, но они говорят об этом в документации.

Ключ в том, что вы должны указать сериализатор. Допустим, у меня есть

class Parent < ActiveRecord::Base 
class Child < Parent 

Я бы следующие показать/индексных действия:

def index 
    render json: children, each_serializer: ParentSerializer 
end 

def show 
    render json: child, serializer: ParentSerializer 
end 
Смежные вопросы