所以我有一个带有关联的模型,我正在使用带有“accepts_nested_attributes_for”的单个表单来创建记录。在表单中,我有一些孩子的选择下拉列表并不总是需要具有选定的值,当发生这种情况时,我想使用我在迁移中指定的默认值。
因此,如果我在没有从下拉列表中选择任何内容的情况下提交表单,我会让Mysql抱怨尝试插入NULL。我认为在某些地方,表单中的空字符串将使用mysql中的默认迁移值/默认值而不是尝试插入NULL?
我错过了什么吗?提前谢谢。
编辑:一些代码......(简化)。 “book_type”应该是“book_type_id”,但不要理会。 p>
Mysql错误消息:
Mysql ::错误:列'book_type'不能为空:INSERT INTO
book_details
(book_id
,book_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
答案 0 :(得分:1)
你有3个选择:
1-更改您的迁移,删除“:null =&gt; false”以避免错误。你说在某些情况下它可能没有被选中,对吗?
2-编辑模型并添加一个before_save回调,如果在表单中留空,则将值更改为“0”。
3-在下拉列表中创建一个“选项”,其中包含一些空标签,其值为“0”。这样,当提交表单时,该值至少为0(如迁移中所定义)
取决于您的需求; - )