Rails 3.2中空表列的最佳实践

时间:2013-02-20 09:26:24

标签: ruby-on-rails database ruby-on-rails-3 database-design ruby-on-rails-3.2

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

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

我没有对用户输入不必要的某些列的默认值,例如。

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

正如你所看到的,Becky的favouritte_color是NULL,因为Becky还没有输入她最喜欢的颜色。

Do Rails开发人员设置:default => ''作为保存空字符串并避免数据库中为NULL的最佳做法?

感谢您的耐心等待,我感谢您提供进一步学习的建议。

WD

3 个答案:

答案 0 :(得分:3)

你有很多选择......

1-第一个是强制用户输入一些数据。因此,您可以使用validation of presence

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最佳实践,更准确地说:Fat Model,Skinny Controller。我会选择选项2.

编辑 - 在确定列的默认值之前,请考虑它的含义。如果意思是没有输入数据,我认为你应该把它留空。感谢Daniel Rikowski的评论,请查看in this question

答案 1 :(得分:1)

答案 2 :(得分:0)

在Rails视图中,我使用类似的东西:

<%= input unless input.blank? %>

将数据保留在数据库中。