Ruby on rails to_json(除了:[])在没有ActiveRecord的Rails模型中无法正常工作

Ruby on rails to_json(除了:[])在没有ActiveRecord的Rails模型中无法正常工作,ruby-on-rails,ruby,to-json,Ruby On Rails,Ruby,To Json,这是我的模型: class ServiceRequest include ActiveModel::Model include ActiveModel::Validations include ActiveModel::Serialization extend ActiveModel::Naming attr_accessor :first_name, :last_name, :prefix, :contact_email, :phone_number,

这是我的模型:

class ServiceRequest
  include ActiveModel::Model
  include ActiveModel::Validations
  include ActiveModel::Serialization
  extend ActiveModel::Naming

  attr_accessor :first_name, :last_name, :prefix, :contact_email, :phone_number,
                :address, :address2, :city, :state, :zip_code, :country,
                :address_type, :troubleshooting_reference, :line_items, :id

  validates_presence_of :first_name, :last_name, :contact_email, :phone_number,
                        :address, :city, :state, :zip_code, :country, :address_type,
                        :troubleshooting_reference

  validate :check_line_items

  def initialize(attributes = {})
    super
    @errors = ActiveModel::Errors.new(self)
    @api_response = nil
    @id = nil
  end

  def check_line_items
    @line_items.each do |item|
      errors.add(:base, "#{item.errors.full_messages.join}") unless item.valid?
    end
  end

  def line_items_attributes=(attributes)
    @line_items ||= []
    attributes.each do |i, params|
      @line_items.push(LineItem.new(params))
    end
  end

  def save
    conn = Faraday.new(url: "#{Figaro.env.arciplex_url}") do |faraday|
      faraday.request :url_encoded
      faraday.response :logger
      faraday.adapter  Faraday.default_adapter
    end

    @api_response = conn.post do |req|
      req.url "/api/v1/service_requests?token=#{Figaro.env.api_token}"
      req.headers['Content-Type'] = 'application/json'
      req.body = self.to_json
    end

    validate!
  end

  def validate!
    # If successful creation, do nothing
    unless [200, 201].include?(@api_response.status)
      Rails.logger.debug(@api_response.inspect)
      errors.add(:base, @api_response.body)
      return false
    else
      Rails.logger.debug(JSON.parse(@api_response.body))
      @id = JSON.parse(@api_response.body)["service_request_id"]
      return true
    end
  end

  def to_json(options = {})
    options[:except] ||= [:id, :api_response, :errors]
    super(options)
  end

end

当我调用self.to_json时,即使我没有包括:id、:api_响应和:errors,它们仍然会出现在jsonified对象中。我显然做错了什么,但我不明白为什么它不起作用。

当你调用superoptions时,选项是你期望的吗?to_json的超级版本是来自ActiveModel::Serialization还是其他地方?它应该来自ActiveModel::Serialization。让我做一些调试,我问,因为我不太熟悉这些东西,我想知道你最终的to_json是否能理解你所期望的所有选项。