Сохраненные данные активной записи Rails - все ноль / ноль - PullRequest
0 голосов
/ 04 октября 2018

Я новичок во всем этом и пытаюсь построить очень простой контроллер.

Это мой метод записи / создания:

Он проверяет, включен ли идентификатор вТитулы.Если есть идентификатор, он делает запрос на обновление существующего автомобиля.В противном случае, он просто создает новый автомобиль.

def write
    if params[ :id ]
      @car = Car.where( id: params[ :id ] ).first
      params[ :car ].each do | key, value |
        attribute = { "#{ key }": value }
        @car.update_attributes( attribute )
      end
    else
      @car = Car.new( 
                model: params[ :model ], 
                num_wheels: params[ :num_wheels ], 
                color: params[ :color ], 
                realm_uuid: params[ :realm_uuid ] 
              )      
    end

    @car.save!
    render json: @car
  end

Это мой файл rout.rb:

Rails.application.routes.draw do

  scope '/api' do
    get '/' => 'cars#query'
    post '/' => 'cars#write'

    scope '/:id' do
      get '/' => 'cars#read'
      put '/' => 'cars#write'
      delete '/' => 'cars#delete'
    end
  end

end

И, наконец, мой car.rb:

class Car < ApplicationRecord

    attr_accessor :model, :num_wheels, :color, :realm_uuid

end

Все маршруты работают правильно, я могу создавать, читать, обновлять и удалять.Дело в том, что когда я читаю, все значения равны нулю / нулю.Когда я делаю пост в Postman, render json: @car возвращает правильный автомобиль со всеми значениями, но когда я делаю запрос get, он говорит, что все значения nil / null.

Я также вижу ошибку:ArgumentError (Wrong number of arguments (given 1, expected 4) Скорее всего, это как-то связано ...

1 Ответ

0 голосов
/ 04 октября 2018

attr_accessor в модели создает метод чтения / записи для переменной экземпляра с соответствующим именем.

В вашем случае он переопределяет методы получения / установки для атрибутов модели и, таким образом, вы записываете в переменную вместо атрибута.Поэтому удалите attr_accessor, и модель должна сохраниться правильно.

Если у вас нет этих полей в БД, тогда вам нужно выполнить миграцию, чтобы добавить их.

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