我不知道你有多少种类型,但我过去只是使用不同类型的控制器和视图。这样你就不会创建基类的新对象并尝试设置类型,只需使用从基类继承的模型即可。您资源的每个新/编辑页面都可以在form_for块中呈现共享的部分。该部分将包含你的file_field。
这种方式当表单被提交时,它会去正确的控制器,调用正确的resource.new,一切正常。
当然缺点是更多的文件和任何页面,你链接到“添加新文件”,你需要添加多个链接,如“添加新的这种类型的文件”,“添加新的文件类型”等
至于设置表单中的类型,我不确定这是否有效,我怀疑它,但只是试一试(让我们知道)。你可以让这个类型下拉一个select_tag,当改变时使用Javascript来改变表单上的动作位置。
编辑和添加周围
不是基础性的工作,我喜欢这个解决方案&我怀疑它绝不是最好的,但如果你真的不想要独立的控制器,你需要得到它的工作你可以做这样的事情:
class XmlFile < ActiveRecord::Base
end
class XmlFileTypeA < XmlFile
end
class XmlFileTypeB < XmlFile
end
def create
# Leaving this case statement in the controller for simplicity but you probably want to move this to the model
case params[:chosen_xml_type]
when "file_type_a"
@item = XmlFileTypeA.new(params)
when "file_type_b"
@item = XmlFileTypeB.new(params)
else
raise "Unknown file type!"
etc
end
end
加1表示“wtF hax !!” – tybro0103 2011-02-07 22:02:53