2016-03-03 3 views
1

Я пытаюсь узнать немного о ActiveModelSerializers в Rails 5. Я следующих за этим tutorial и побежал в некоторые ошибки:Rails 5 и ActiveModelSerializers

я, вероятно, не следует возиться с Rails 5 бета права?

rails -v 
Rails 5.0.0.beta3 

и Ruby:

ruby -v 
ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-darwin15] 

Вот моя схема:

ActiveRecord::Schema.define(version: 20160303205439) do 

    create_table "rental_units", force: :cascade do |t| 
    t.string "address" 
    t.integer "rooms" 
    t.integer "bathrooms" 
    t.integer "price_cents" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "user_id" 
    end 

    add_index "rental_units", ["user_id"], name: "index_rental_units_on_user_id" 

    create_table "users", force: :cascade do |t| 
    t.string "name" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.string "email" 
    end 

end 

Вот мои семена:

User.create(name: "1st user", email: "[email protected]") 
User.create(name: "2nd user", email: "[email protected]") 
User.create(name: "3rd user", email: "[email protected]") 

RentalUnit.create(address: "1st address", rooms: 2, bathrooms: 2, price_cents: 50000, user_id:1) 
RentalUnit.create(address: "2nd address", rooms: 2, bathrooms: 2, price_cents: 50000, user_id:1) 
RentalUnit.create(address: "3rd address", rooms: 2, bathrooms: 2, price_cents: 50000, user_id:1) 
RentalUnit.create(address: "4th address", rooms: 2, bathrooms: 2, price_cents: 50000, user_id:2) 

Вот мой RentalUnit Модель:

class RentalUnit < ApplicationRecord 
end 

Вот мой RentalUnitSerializer:

class RentalUnitSerializer < ActiveModel::Serializer 
    attributes :id, :address, :rooms, :bathrooms, :price, :price_per_room 
    belongs_to :user 
end 

Когда я пытаюсь запустить сервер рельсы, я получаю:

rs 
=> Booting Puma 
=> Rails 5.0.0.beta3 application starting in development on http://localhost:3000 
=> Run `rails server -h` for more startup options 
=> Ctrl-C to shutdown server 
Exiting 
/Users/Jwan/Dropbox/programming/rails/api_codeship/app/serializers/rental_unit_serializer.rb:3:in `<class:RentalUnitSerializer>': undefined method `belongs_to' for RentalUnitSerializer:Class (NoMethodError) 
    from /Users/Jwan/Dropbox/programming/rails/api_codeship/app/serializers/rental_unit_serializer.rb:1:in `<top (required)>' 
... 

Любая идея, что происходит?

У кого-нибудь есть хорошие учебники по дизайну API, Rails API и AMS, которые работают?

ответ

2

Вы упускаете has_one или has_many отношения в вашей RentalUnit модели (и, возможно, User модель тоже). Добавьте belongs_to :user в свою модель RentalUnit и либо has_one, либо has_many в вашей модели User в зависимости от того, что вы хотите.

Я использую Rails 5beta2 и ActiveModel Serializer, и он отлично работает ... угадать бета3 должно быть только лучше.

+0

Я вижу, так что принадлеж. Класса в RentalUnitSerializer недостаточно? – Jwan622

+0

Правильно, потому что Serializer берет модель и преобразует ее в JSON. Если у модели нет поля 'user_id', то нет данных, чтобы сказать, к какому пользователю он принадлежит. – HM1

+0

Итак, что же делает own_to: пользователь в Serializer? – Jwan622

Смежные вопросы