参数需要抛出参数丢失或值为空:文章

问题描述

全部,我正在按照教程创建一个 rails api。我在使用 rails 6 和 fast_jsonapi gem 时遇到了问题。

我的控制器中有以下内容

module Api
module V1
class ArticlesController < ApplicationController
 protect_from_forgery with: :null_session
  def index
    articles = Article.all
    
   render json: ArticleSerializer.new(articles,options).serialized_json
  end
  
  def show
    article = Article.find_by(slug: params[:slug])
    render json: ArticleSerializer.new(article,options).serialized_json
  end
  
  
  def create
    article = Article.new(article_params)
    if article.save
      render json: ArticleSerializer.new(article).serialized_json
    else
      render json: {error: article.error.messages},status: 422
    end
  end
  


  
   def update
    article = Article.find_by(slug: params[:slug])
    if article.update(article_params)
      render json: ArticleSerializer.new(articles,options).serialized_json
    else
      render json: {error: article.error.messages},status: 422
    end
  end
  
  
   def destroy
    article = Article.find_by(slug: params[:slug])
    if article.destroy(article_params)
      head :no_content
    else
      render json: {error: article.error.messages},status: 422
    end
  end
  
  private
  
  def article_params
    params.require(:articles).permit(:name,:image_url)
   # params.permit(:name,:image_url)
  end
  #compond document,pass in optional hash with additionalresources
  def options
    @options ||= {include:%i[reviews]}
  end
  
end

结束 结束

但是,当我尝试使用以下强参数创建文章时,我可以获得请求

params.require(:articles).permit(:name,:image_url)

我得到以下信息:

enter image description here

如果我删除 require 并添加

params.permit(:name,:image_url)

记录已创建但为空

{
"data": {
    "id": "21","type": "article","attributes": {
        "name": null,"image_url": null,"slug": "article"
    },"relationships": {
        "reviews": {
            "data": []
          }
      }
  }

}

对此有任何帮助吗?

这是我的审核控制器:

module Api
 module V1
 class ReviewsController < ApplicationController
  protect_from_forgery with: :null_session
   def create
    review = Review.new(review_params)
    if article.save
      render json: ReviewSerializer.new(review).serialized_json
    else
      render json: {error: review.error.messages},status: 422
    end
  end
  
  
  def destroy
    review = Review.find_by(params[:id])
    if review.destroy
      head :no_content
    else
      render json: {error: review.error.messages},status: 422
    end
  end
  
  
  private
  
   def review_params
   # params.require(:article).permit(:title,:description,:score,:article_id )
     params.permit(:title,:article_id )
   end
  
  end
end

结束

我的路线

Rails.application.routes.draw do
root 'pages#index'
namespace :api do
namespace :v1 do
resources :articles,param: :slug
  resources :reviews,only: [:create,:destroy]

 end

 end
  get '*path',to: 'pages#index',via: :all
end

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)