【问题标题】:Rails 5 Column Named Root MisbehavingRails 5 列名为 Root Misbeaving
【发布时间】:2020-01-17 15:50:05
【问题描述】:

我正在尝试在 Rails 5 中创建一个 restful API,我的一个类有一个名为 root 的属性。这个根属性导致了一些错误,我将提供一个示例。 root 是 rails 或 ruby​​ 中的受保护属性名称吗?

class ObjectsController < ApplicationController
  before_action only: %i[create]

  def create
    @object = Object.create(object_params)
    render json: @object
  end

  private


  def object_params
    params.require(:object).permit(:id, :root)
  end

当我发布到 /objects/ 类似于以下内容:

{"object": {"id": "manual_id" , "root": "manual_root"}}

我在 Postman 中返回以下内容:

{
    "id": "manual_id",
    "root": null,
    "extension": "manual_extension"
}

但在 MySQL 数据库中,root 的值是 manual_root。 有没有人知道这个问题可能是什么。

【问题讨论】:

  • 在rails中找不到root是保留字的任何地方,但路由中有一个名为root的命名空间,所以我建议不要使用这个词。
  • 请执行以下操作: 1. puts "*"*100 puts params puts "*"*100 在 ObjectsController 中第 5 行之前和之后的 3 行中,并检查服务器控制台中星号之间的参数。你的参数发生了一些可疑的事情。
  • 感谢@ARK 的建议我已经找到了解决方案,现在将添加答案。

标签: mysql ruby-on-rails ruby ruby-on-rails-5 postman


【解决方案1】:

解决方案是向模型添加属性别名,如下所示:

class Object < ApplicationRecord
  alias_attribute :object_root, :root
end

并在对象序列化器类中使用此属性:

class ObjectSerializer < ActiveModel::Serializer
  attributes :id, :object_root
end

所以我的问题在于活动模型序列化程序,我相信 root 是保留关键字。这是一个类似的问题:https://github.com/rails-api/active_model_serializers/issues/1135

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2011-09-24
    相关资源
    最近更新 更多