【发布时间】:2011-06-22 01:41:17
【问题描述】:
我有两个模型,第一个模型 (model_1) 接受第二个模型 (model_2) 的嵌套属性。第二个模型只有一个字段(file),在表单中作为文件字段引用。
没有选择文件时出现问题。在这种情况下——除了一个文本字段——该字段根本不会出现在 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 的更新就不能忽略验证了?
-
我实际上是这样做的
@model_2 = @model_1.model_2s.build。不过,似乎没有任何改变。 -
您应该添加 .save(false) 以真正保存对象并在此处绕过验证
-
但是我不会得到很多这样的无效条目吗?
-
发现这个:stackoverflow.com/questions/3152001/… 但与隐藏属性相比似乎有点过分了
标签: ruby-on-rails validation nested-attributes filefield