Jbuilder использует запрос POST к API в Ruby On Rails

Я пытаюсь разделить Backend и Frontend в своем проекте, используя Rails и ReactJS.

И у меня есть функция, чтобы сделать асинхронную обработку для POST запросить и использовать гем Jbuilder для создания JSON API

JavaScript:

fetch('shops/1/deals',{
      method: "POST",
      body: JSON.stringify({shop_id: 1, deals_type: "workout"}),
      headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
      },
    })
    .then(function(res){ 
      console.log(res)
      res.json().then(function(data){
       alert( JSON.stringify( data ) ) 
     })
})

контроллер:

def index 
 @shop = Shop.find(params[:id])
 @deals = @shop.deals
end

def create
 @deal = Deal.new(deal_params)
 respond_to do |format|
  if @deal.save
   format.json { render :show, status: :created, location: @deal }
  else
   format.json { render json: @deal.errors, status: :unprocessable_entity }
  end
 end
end

если у меня есть _deal.json.jbuilder файл в views/deals

json.extract! deal, :id, :shop_id, :deals_type, :created_at, :updated_at, :deal_time

Я получу предупреждение {id: number, shop_id: 1, deals_type: "workout", .....}

Но я удаляю _deal.json.jbuilder файл, я получу {} нулевой объект.

почему проблема происходит?

1 ответ

Решение

Эта строка:

format.json { render :show, status: :created, location: @deal }

Говорит Rails, чтобы сделать ваш show посмотреть на JSON, который, вероятно, загружает ваш app/views/deals/show.json.jbuilder Посмотреть; эта точка зрения, скорее всего, просто делает ваш _deal частично. Удаление частичных приводит к тому, что это определение представления становится недействительным.

Поэтому не удаляйте частичное, если вы не готовы обновить шаблоны, которые к нему относятся.

Другие вопросы по тегам