使用Ruby on Rails模拟TEXT列的默认值的最佳方法?

时间:2011-05-11 07:46:54

标签: mysql ruby-on-rails

我在MySQL数据库中使用TEXT列。正如文档所述,无法为这些列设置默认值。

我目前正在使用以下代码来模拟此行为:

class Data
  before_save lambda {text_column ||= ''}
end

有没有更好的,更多的railis / active_record方法来做到这一点?

3 个答案:

答案 0 :(得分:3)

如果您对HTML5解决方案感到满意,您是否在:text_field上尝试过:占位符属性?

您是否真的想将text_field(捕获少量文本)填充到“文本”类型列中?你的意思是text_area吗?

如果您希望“默认值”实际存储在数据库中,如果用户没有输入任何内容,那么我建议如下。这是“工厂”模式。

您可以在模型中创建“设置”方法,而不是在ActiveRecord模型类上调用“new”

def self.setup(params = {})
  new(params).tap do |v|
    v.text_column = "default value"
    # other defaultings
  end
end

在您的控制器中,而不是在类上调用new,您调用setup。

答案 1 :(得分:-1)

在迁移中添加此内容

add_column :table_name, :column_name, :string, :default => 'your text'

为我工作

答案 2 :(得分:-3)

如果表单中有新文本字段,请使用此文本字段的默认值:

#views/controller/new.html.erb
<%= f.text_field :column_name, :value => "default value" %>

这是一个很好的可用性选择,因为用户知道该列的默认值。

不要在edit.html.erb中使用它,因为在这种情况下,无论数据库中的原始值如何,此字段仍将具有默认值。