我不知道你有多少種類型,但我過去只是使用不同類型的控制器和視圖。這樣你就不會創建基類的新對象並嘗試設置類型,只需使用從基類繼承的模型即可。您資源的每個新/編輯頁面都可以在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