如何在 JSON 反序列化时忽略某些字段?

How to ignore certain fields while JSON deserialization?

我有一个 json 想要反序列化并保存到数据库。这是一个代码片段:

class WelcomeController < ApplicationController
  def index
    json_articles = JSON.parse('json_string_here')
    json_articles['articles'].each do |article|
      Article.new(article).save
    end
  end
end

在反序列化过程中,由于数据库模式 article_link 字段不存在,我收到以下错误:

unknown attribute 'article_link' for Article.

所以,这是我的问题:

  1. 如果我想在反序列化时忽略这个字段怎么实现?
  2. 如果对上面提供的代码有意见?

谢谢。

您可以执行以下操作

Article.new(article.except('article_link')).save

您可以使用

进一步缩短此行
Article.create(article.except('article_link'))

这会同时执行 newsave。如果您在 Article 模型中有任何验证,如果这些验证失败,则两个变体可能不会保存到数据库中。您可能需要在此处检查此类错误。