我有兩個模型,第一個(model_1
)接受第二個嵌套屬性(model_2
)。第二個模型只有一個字段(file
),它在表單中作爲文件字段引用。當空時,Rails /嵌套屬性/ file_field不會在params內顯示
問題出在沒有選擇文件。在這種情況下(除了說文本字段),字段在POST參數中完全不出現,第一個模型認爲根本不應該創建任何嵌套模型。這不能觸發驗證等。如果我要添加第二個字段到model_2和相應的表單,並且如果我使用文本輸入,則一切都會很好地進行,自然驗證對於文件字段也可以正常工作。
任何人都有關於如何去做這件事的經驗?
而且更好一些(簡體)碼 - 形式:
= form_for @model_1, :html => { :multipart => true } do |f|
- # fields for model 1 …
= f.fields_for :model_2 do |builder|
- # if this is empty, it's like no model_2 would be created at all:
= builder.file_field :file
模型1:
class Model1 < ActiveRecord::Base
has_many :model_2s, :dependent => :destroy
accepts_nested_attributes_for :model_2s
# …
end
和模式2:
class Model2 < ActiveRecord::Base
belongs_to :model_1
validates_presence:of :file
# …
end
如果你創建創建窗體之前鏈接在你的控制器MODEL1的MODEL2?這樣,model2的更新不能忽略驗證否? – apneadiving 2011-02-05 23:09:59
我正在這樣做`@ model_2 = @ model_1.model_2s.build`。雖然似乎沒有改變任何東西。 – polarblau 2011-02-05 23:28:02
您應該添加.save(false)來真正保存對象並在此繞過驗證 – apneadiving 2011-02-05 23:32:16