无法通过rails将数组保存到数据库中

时间:2016-07-30 16:11:36

标签: ruby-on-rails arrays ruby curl

我正在尝试创建一个配方网站,当我尝试执行curl请求将数据作为数组保存到我的数据库时,我遇到了一些问题。我为后端使用了rails,为我的数据库使用了psql。

移植

class CreateRecipes < ActiveRecord::Migration 
    def change
       create_table :recipes do |t|
              t.text :instruction, array: true, default: []
       end
    end
end

模型

class Recipe < ActiveRecord::Base
   serialize :instruction,Array
end

控制器

def create
    @recipe = Recipe.new(recipe_params)
    **_binding.pry_**
    current_user.recipes << @recipe

    if @recipe.save
      render json: @recipe, status: :created, location: @recipe
    else
      render json: @recipe.errors, status: :unprocessable_entity
    end
end

def recipe_params
  params.require(:recipes)
        .permit(:name, :category, instruction: [])
end

卷曲请求

curl --include --request POST http://localhost:3000/recipes \
  --header "Authorization: Token token=........" \
  --header "Content-Type: application/json" \
  --data '{
    "recipes": {
      "name": "an example recipe",
      "category": "fry",
      "instruction": ["do it", "ignore it"]
        }
      }'

用pry测试后,

pry(#<RecipesController>)> @recipe
=> #<Recipe:0x007fa0aeafa770 id: nil, name: "an example recipe", category: "fry", instruction: [], user_id: nil, created_at: nil, updated_at: nil>`

pry(#<RecipesController>)> recipe_params
=> {"name"=>"an example recipe", "category"=>"fry", "instruction"=>["do it", "ignore it"]}

所以有人能告诉我这是什么问题吗?以及如何解决它?谢谢。

1 个答案:

答案 0 :(得分:1)

n课程中删除#define UNPOLY ((POLY << 1) + 1) uint32_t crc32_remove_zeros(uint32_t crc, size_t n) { crc = ~crc; while (n--) for (int k = 0; k < 8; k++) crc = crc & 0x80000000 ? (crc << 1) ^ UNPOLY : crc << 1; crc = ~crc; return crc; } ,它应该有效。

serialize :instruction, Array属性未分配Recipe的原因是后者接受一个对象并将其序列化为YAML。反过来,模型的array-typed属性需要一个普通的ruby数组。

instruction工具用于以文本形式存储任意对象,通常用于后续实例化。没有必要对数组属性执行序列化。