создать запись для current_user, используя почтальон ruby ​​на рельсах - PullRequest
1 голос
/ 21 июня 2019

У меня есть 2 пользователя таблицы и предметы.когда я пытаюсь создать предмет через API почтальона.Я получаю сообщение об ошибке, что элементы равны нулю, потому что он ищет current_user.items и приводит к тому, что пользователь не выходит из API, когда я пытаюсь создать элемент.

    @item = current_user.items.build(item_params)

вопрос о том, как пройти аутентификацию и стать current_userкогда я пытаюсь создать предмет из почтальона?

вот API, который я отправляю

 http://localhost:3000/api/v1/createitem

и вот сообщение об ошибке

    "exception": "#<NoMethodError: undefined method `items' for nil:NilClass>",

здесьиз командной строки enter image description here

this items_controller.rb

class Api::V1::ItemsController < ApplicationController
def createitem
  @item = current_user.items.build(item_params)
  if @item.save
    redirect_to listing_item_path(@item), notice: "Saved..."
  else
    flash[:alert] = "Something went wrong..."
    render :new
  end
end
def item_params
  params.require(:item).permit(:item_category, :item_condition,:item_name,:summary,:address,:price,:active, :instant)
end
end

ошибка происходит в строке 81 файла items_controller.rb, которая в этой строке

    @item = current_user.items.build(item_params)

это json в отправке

{"item_category": "Books & Magazines", "item_condition": "Used", "item_name": "Crushing it", "summary": "super awesome", "price": 20, "active": true,"instant": 1}

здесь application_controller.rb

class ApplicationController < ActionController::API
include Authenticate
  rescue_from ActiveRecord::RecordNotFound, with: :render_404

  def render_404
   render json: { error: "Invalid ID", is_success: false}, status: 404
  end
 end

У меня есть API для входа в систему, и это работает

http://localhost:3000/api/v1/login

1 Ответ

1 голос
/ 21 июня 2019

Прежде всего вы должны определить / извлечь current_user.поскольку API полностью отличается от веб-приложения, они не могут обрабатывать сессии, так как браузер не задействован.Поэтому нам нужно обрабатывать авторизацию по-другому.

Я предполагаю, что ваш API входа в систему возвращает некоторый уникальный токен для вошедшего в систему пользователя, если нет, чем вы должны реализовать это первым.

Вы должны передать этот токен в каждом вызове API в заголовке и проверить еготокен для получения current_user.

Пожалуйста, Прочтите это для получения дополнительной информации.

...