【问题标题】:Replace Nil Values before_save Rails替换 Nil 值 before_save Rails
【发布时间】:2016-12-17 03:55:47
【问题描述】:

我有一个 json 文件要导入到我的 Rails 数据库中。

JSON:

{
 "data": [{
   "title": "foo",
   "color": "bar",
   "size" : "baz",
   "occupation" : "engineer",
   "location" : "dallas",
   "car" : "tesla",
   "married" : true,
   "dogs" : 4,
   "food" : "tacos"   
}]

现在假设“标题”未列在其中一个示例中,它存储为 nil。我知道我可以在模型中使用 before_save 更新它

Class Person
  before_save :replace_nil_values

  private

  def replace_nil_values
    self.title = "Not Listed" if title == nil
  end
end

这行得通。问题是如果多个属性丢失或列为 nil 会发生什么?我觉得这样做会非常低效:

def replace_nil_values
  self.title = "Not Listed" if title == nil
  self.color= "Not Listed" if color == nil
  self.size = "Not Listed" if size == nil
  self.occupation = "Not Listed" if occupation == nil
  self.location = "Not Listed" if location == nil
  self.car = "Not Listed" if car == nil
end

有没有更有效的方法?

谢谢

【问题讨论】:

    标签: ruby-on-rails json ruby model


    【解决方案1】:

    我的建议是将它们作为nil 留在数据库中。如果您需要在 UI 中显示“未列出”,请在显示数据时执行此操作。这提供了许多好处:

    • 以后您可以轻松地将“未列出”更改为其他内容。
    • 您可以即时翻译。
    • 您永远不会将空白的“未列出”与用户输入的合法“未列出”混淆。

    【讨论】:

    • 谢谢菲利普!我从来没有考虑过这些后果。我按照您的回答运行并实现了一个辅助方法,在这里解释:stackoverflow.com/a/22098115/3007294 欣赏它!
    • ? 您可能想了解装饰器/演示者模式,这些模式允许您使用封装您的辅助逻辑的title 方法创建PersonPresenter。同样的事情,只是巩固了一些。请参阅railscasts.com/episodes/286-draper 了解其他选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多