2017-02-15 12 views
0

Я разрабатываю API Rails 5, где у меня есть модель компании.Проверка числовых значений при обновлении записи в Rails 5 API

Компания имеет 3 поля, имя, адрес электронной почты и разметку.

И проверка

validates :name, presence: true 
validates :email, presence: true 
validates :markup, presence: true, numericality: { only_integer: true } 

Когда я хочу, чтобы обновить запись с помощью PUT: компании/1 Я только хочу, чтобы передать значения, которые изменились. Поэтому, если я не отправляю параметр имени, имя не изменяется. Это работает, и валидатор не жалуется.

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

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

В моей CompanyController я имею

def update 
    if @company.update(company_params) 
     render json: { 
     status: 200, 
     message: 'Company updated successfully', 
     company: @company 
     }.to_json() 
    else 
     render json: @company.errors, status: :unprocessable_entity 
    end 
end 

И это:

def company_params 
     params.permit(:name, :email, :markup) 
end 
+0

вы можете показать свой код контроллера? –

+0

Возможно ли, что вы пытаетесь обновить «старую» запись, которая не имеет набора атрибутов «markup»? И что такое тип столбца базы данных 'markup'? Целое, или ... строка? – zwippie

ответ

0

Пусть Todo Модель имеет три поля:

tilte, CREATED_BY, подсчета

В модели

class Todo < ApplicationRecord 
    has_many :items, dependent: :destroy 

    # validations 
    validates_presence_of :title, :created_by 
    validates :count, presence: true, numericality: { only_integer: true } 
end 

В контроллере

def update 
     if @todo.update(todo_params) 
     render json: { 
      status: 200, 
      message: 'todo updated successfully', 
      todo: @todo 
      }.to_json() 
     else 
     render json: @todo.errors, status: :unprocessable_entity 
     end 
    end 

Curl Запрос

curl -H "Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE0ODc0MjI5MDN9.QeNmnxcrxZtb_Yy68aQ5jmV6r2qTTLkJS2NdyEeEpfc" http://localhost:3000/todos/1 -XPUT -d"title=nothing&created_by=rbk" 

Здесь я не Пропусков поле в завиток запросе еще дать ответ 200

Ouput

{"status":200,"message":"todo updated successfully","todo":{"id":1,"title":"nothing","created_by":"rbk","count":123,"created_at":"2017-02-17T13:06:24.188Z","updated_at":"2017-02-17T13:13:01.109Z"}} 

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

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

  • Нет связанных вопросов^_^