2010-07-07 183 views
0

因此,我使用關聯創建了一個模型,並使用帶「accepting_nested_attributes_for」的單一表單來創建記錄。在表單中,我有幾個選擇下拉菜單,並不總是需要選擇一個值,當發生這種情況時,我想使用我在遷移中指定的默認值。不使用遷移中的默認值

因此,如果我提交表單時沒有從下拉列表中選擇任何東西,我會得到Mysql抱怨試圖插入NULL。我認爲表單中的空字符串會在mysql中使用默認的遷移值/默認值,而不是試圖插入NULL?

我錯過了什麼嗎?提前致謝。

編輯:一些代碼...(簡體)。 「book_type」實際上應該是「book_type_id」,但是忽略它。

MySQL錯誤信息:

Mysql::Error: Column 'book_type' cannot be null: 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

你能告訴你的遷移和特定的MySQL錯誤請的細節? – bjg 2010-07-07 10:58:28

+0

增加了一些更多的細節...我知道有人會要求更多的信息。 =) 所以在book_type下拉我不想要求用戶輸入的形式,當他們不選擇任何我想要的條目爲0. – james 2010-07-07 11:08:03

回答

1

你有3種選擇:

1-變化遷移,刪除 「:空=>假」,以避免錯誤。你說在某些情況下它可能沒有被選中,對嗎?

2-編輯模型並添加一個before_save回調以將其值更改爲「0」的值,如果該值在表單中留空。

3-在下拉列表中創建一個「選項」,其中有一些空標籤並將其值設爲「0」。這種方式提交表單時,值保持至少爲0(在遷移中定義)

這取決於你的需求;-)

+0

啊好的很酷。謝謝! – james 2010-07-07 19:04:28