我对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
答案 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)
试试这个宝石,如果它适合你:
https://github.com/rubiety/nilify_blanks
这也可以帮助你 - > Ruby/Rails using || to determine value, using an empty string instead of a nil value
答案 2 :(得分:0)
在Rails视图中,我使用类似的东西:
<%= input unless input.blank? %>
将数据保留在数据库中。