1

我对 Rails 中的数据库数据有疑问。

空表列的最佳做法是什么?

我在某些非用户输入的列上没有默认值,例如。

User model
ID | name       | drink_of_choice |  favourite_color
-----------------------------------------------------
1  | Benji      | coffee          |  yellow
2  | Becky      | tea             |  NULL
-----------------------------------------------------

如您所见,Becky 的 favouritte_color 为 NULL,因为 Becky 尚未输入她最喜欢的颜色。

Rails 开发人员是否将 :default => '' 设置为保存空字符串并避免在数据库中出现 NULL 的最佳实践?

感谢您的耐心等待,感谢您对我进一步学习的任何建议。

西部数据

4

3 回答 3

3

你有很多选择...

1-第一个是强制用户输入一些数据。因此,您可以使用存在验证

class User < ActiveRecord::Base
  validates :name, :drink_of_choice, :favourite_color, :presence => true
  ...
end

2- 但是,您可能希望允许用户将某些列留空。如果是这样,您可以在模型中为其设置默认值,例如:

class User < ActiveRecord::Base
  before_save :set_favourite_color
  ...
  def set_favourite_color
    self.favourite_color ||= ''
  end
end

3-您也可以在控制器中设置它,例如:

def new
  @user = User.new
  @user.favourite_color ||= ''
  ...
end

4-另一种选择,但我不太喜欢它(根本不灵活),是在您的迁移文件中定义它:

class CreateUser < ActiveRecord::Migration
  def change
    create_table :users do |t|
      ...
      t.string :favourite_color, default: ''
      ...
      t.timestamps
    end
  end
end

最好的方法是什么?

遵循 Rails 最佳实践,更准确地说:胖模型,瘦控制器。我会选择选项2。

编辑- 在决定列的默认值之前,请考虑它的含义。如果意思是没有输入数据,我认为您应该将其保留为空。感谢Daniel Rikowski的评论,请看一下这个问题

于 2013-02-20T09:56:07.480 回答
1

如果它适合你,试试这个宝石:

https://github.com/rubiety/nilify_blanks

这也可以帮助 u-> Ruby/Rails 使用 || 确定值,使用空字符串而不是 nil 值

于 2013-02-20T09:55:45.017 回答
0

在 Rails 视图中,我使用如下内容:

<%= input unless input.blank? %>

并将数据保留在数据库中。

于 2013-03-12T17:13:46.330 回答