通过postman传递Post请求以获取rails中的has_many关联

时间:2017-10-19 19:10:03

标签: ruby-on-rails json ruby postman

我是一名新学员,需要一些帮助。我有两个模型(我通过脚手架生成)。类别和产品。

  class Category
   include Mongoid::Document
   field :name, type: String

   has_many :products
   accepts_nested_attributes_for :products
 end

 class Product
   include Mongoid::Document
   include Mongoid::Paperclip
   include Mongoid::Timestamps::Created

   field :name, type: String
   field :description, type: String
   field :prize ,type: Integer
   field :category_id
   field :user_id

has_mongoid_attached_file :avatar,
  :styles => {
      :thumb => "150x150#",
      :small  => "150x150>",
      :medium => "550x550#{}" }

belongs_to :user
belongs_to :category
end

我的类别控制器

#POST /categories.json

 def create
    @category = Category.new(category_params)


    respond_to do |format|
      if @category.save
        format.html { redirect_to @category, notice: 'Category was successfully created.' }
        format.json { render :show, status: :created, location: @category }
      else
        format.html { render :new }
        format.json { render json: @category.errors, status: :unprocessable_entity }
      end

    end


 def category_params
      params.require(:category).permit(:name,product_attributes: [ :name, :description,:prize ,:category_id])
    end

  end

我的json格式

{

    "name":"Mens Clothing",
    "products_attributes": [
        {

            "name":"Denim jeans",
            "Description": "test test test"
            "prize":1000,
            "user_id":1,
        }
    ]
}

现在我的问题是当我尝试通过邮递员点击localhost:3000 /类别时,值不会被保存。另外,我不知道我的json格式是否正确,或者我的类别控制器代码是否正确。我是新手,并试图弄清楚数据是如何以json格式保存为rails.iam中的has_many关系获取缺失的参数错误

1 个答案:

答案 0 :(得分:1)

您需要将基本资源名称作为JSON中的键:

{"category": {

    "name":"Mens Clothing",
    "products_attributes": [
        {

            "name":"Denim jeans",
            "Description": "test test test", # <== Added a comma here
            "prize":1000,
            "user_id":1,
        }
    ]
}}

params.require(:category)表示您要查看传入参数并提取:category键的值,如果找不到该键,则会引发ActionController::ParameterMissing异常。

如果找到:category密钥,则会将其值传递给#permit,这会过滤掉未包含在已批准列表中的所有密钥。

由于您的参数中没有:category,因此您的日志应反映ActionController::ParameterMissing例外情况。