Прямоугольник + рельсы: неизвестная ошибка атрибута

Я хочу сделать запрос на исправление с помощью Restangular для обновления атрибутов пользователя. Итак, напишите это:

user.patch(user: user).then(function (result) ...

Я использую структуру винограда в рельсах, и мой контроллер выглядит так:

desc 'Update a user'
    params do
      requires :user, type: Hash, desc: "user attributes" do
        optional :email, type: String, allow_blank: false, regexp: /.+@.+/, documentation: { example: '[email protected]' }
        optional :password, type: String, allow_blank: false
        optional :firstname, type: String
        optional :lastname, type: String
        optional :city, type: String
        optional :date_of_birth, type: Date
      end
    end

    patch ':id' do
      puts params.to_h
      user = User.find(params[:id])
      user.update(params[:user].to_h)
      user
    end

К сожалению, у меня нет маршрутов атрибутов в моей пользовательской модели, поэтому рельсы показывают эту ошибку:

ActiveRecord::UnknownAttributeError (unknown attribute: route):
  app/controllers/api/v1/users.rb:44:in `block (2 levels) in <class:Users>'

Что я должен делать? Удалить этот атрибут в угловых или в рельсах? Можно ли обновить модель только с выбранными параметрами?


person dakolech    schedule 12.04.2015    source источник


Ответы (1)


Имейте в виду, что лучше всего создавать/обновлять записи ТОЛЬКО с параметрами, которые вы хотите разрешить, и вы можете легко сделать это с помощью Grape.

У Grape есть удобный метод declared, который принимает params с необязательным аргументом include_missing. Таким образом, вы можете написать хелпер, который отфильтровывает любые параметры, не объявленные в блоке params do ... end:

def permitted_params
  @permitted_params ||= declared(params, include_missing: false).to_h
end

И затем в вашем контроллере:

patch ':id' do
  user = User.find(params[:id])
  user.update(permitted_params[:user])
end
person Yaro Holodiuk    schedule 12.05.2015