2017-08-24 8 views
0

J'essaie de diviser Backend et Frontend dans mon projet en utilisant Rails et ReactJS.Jbuilder utilise une requête POST pour API dans Ruby On Rails

Et j'ai une fonction pour effectuer le traitement async pour POST demande et en utilisant la gemme Jbuilder pour produire l'API JSON

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)) 
    }) 
}) 

Controller:

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 

si j'ai le fichier _deal.json.jbuilder en views/deals

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

J'obtiendrai alerte {id: number, shop_id: 1, deals_type: "workout", .....}

Mais je supprimer le fichier _deal.json.jbuilder, je vais obtenir {} objet nul.

Pourquoi le problème se produit-il?

Répondre

1

Cette ligne:

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

Rails pour rendre Tells votre point de vue show pour JSON, qui charge probablement votre app/views/deals/show.json.jbuilder vue; cette vue elle-même rend probablement votre _deal partiel. La suppression des causes partielles entraîne l'invalidation de la définition de vue. Par conséquent, ne supprimez pas le partiel à moins que vous ne soyez également prêt à mettre à jour les modèles qui s'y réfèrent.