Problem z generowaniem serializerów

Witam wszystkich

Obecnie w miarę możliwości staram się pomóc koledze z projektem. Jednym z wymogów jest użycie JsonApi. Korzystam obecnie z tego tutoriala: https://www.youtube.com/watch?v=EpzIhQBXUQk jednak polecenie z 7:06 już u mnie nie działa. Gdy dodam serializer ręcznie również nie wyświetla mi jsona w nowym formacie a z poprzedniego kroku. Proszę o pomoc.
Wersja rails 5.2.0.alpha
Ruby 2.4.2p198.

Pozdrawiam

Edit: zapomniałem, jedyna rożnica to użyta baza danych. Korzystam z postgresql

Nie ma tego w nowych railsach, dodaj bibliotekę ręcznie
gem 'active_model_serializers'

1 Like

Mam tą bibliotekę dodaną w gemfile. W poradniku jest ten krok. Pomogło określenie wersji serializera:

gem ‘active_model_serializers’, ‘0.9.3’

Po tej zmianie zadziałało polecenie:

rails g serializers post

Jednak nadal nie są przesyłane dane jak określone w serializerze

może dasz nam jakieś logi?

Przepraszam nie przyszło mi to wcześniej do głowy :slight_smile:

Started GET “/posts.json” for 127.0.0.1 at 2017-11-19 23:38:40 +0100
e[1me[35m (0.9ms)e[0m e[1me[34mSELECT “schema_migrations”.“version” FROM “schema_migrations” ORDER BY “schema_migrations”.“version” ASCe[0m
Processing by PostsController#index as JSON
e[1me[36mPost Load (8.4ms)e[0m e[1me[34mSELECT “posts”.* FROM "posts"e[0m
Completed 200 OK in 78ms (Views: 24.5ms | ActiveRecord: 20.9ms)

kod kontrolera:

class PostsController < ApplicationController
def index
@posts = Post.all;
render json: @posts, serializer: PostSerializer
end
end

oraz serializera:

class PostSerializer < ActiveModel::Serializer
attributes :id, :body
has_many :comments
end

Spróbuj zmienić

serializer:

na

each_serializer:

Hej, dzięki za odpowiedź ale nie pomogło :slight_smile:

Ale znalazłem rozwiązanie. Z pomocą przyszła dokumentacja: https://github.com/rails-api/active_model_serializers/tree/0-9-stable. A mianowicie ten fragment:

Use serialization outside of ActionController::Base

When controller does not inherit from ActionController::Base, include Serialization module manually:

class ApplicationController < ActionController::API
include ActionController::Serialization
end

Dziękuję wszystkim którzy zainteresowali się tematem za pomoc :slight_smile: