表单不使用迁移中的默认值

时间:2010-07-07 10:43:57

标签: ruby-on-rails

所以我有一个带有关联的模型,我正在使用带有“accepts_nested_attributes_for”的单个表单来创建记录。在表单中,我有一些孩子的选择下拉列表并不总是需要具有选定的值,当发生这种情况时,我想使用我在迁移中指定的默认值。

因此,如果我在没有从下拉列表中选择任何内容的情况下提交表单,我会让Mysql抱怨尝试插入NULL。我认为在某些地方,表单中的空字符串将使用mysql中的默认迁移值/默认值而不是尝试插入NULL?

我错过了什么吗?提前谢谢。

编辑:一些代码......(简化)。 “book_type”应该是“book_type_id”,但不要理会。

Mysql错误消息:

  

Mysql ::错误:列'book_type'不能为空:INSERT INTO book_detailsbook_idbook_type,...)VALUES(1,NULL,...)

迁移:

class CreateBookDetails < ActiveRecord::Migration
  def self.up
    create_table :book_details do |t|
      t.integer :book_id, :null => false, :default => 0
      t.integer :book_type, :null => false, :default => 0
      ...

      t.timestamps
    end
  end

  def self.down
    drop_table :book_details
  end
end

1 个答案:

答案 0 :(得分:1)

你有3个选择:

1-更改您的迁移,删除“:null =&gt; false”以避免错误。你说在某些情况下它可能没有被选中,对吗?

2-编辑模型并添加一个before_save回调,如果在表单中留空,则将值更改为“0”。

3-在下拉列表中创建一个“选项”,其中包含一些空标签,其值为“0”。这样,当提交表单时,该值至少为0(如迁移中所定义)

取决于您的需求; - )