Rab*_*ott 6 polymorphism ruby-on-rails single-table-inheritance
我有一个表单,允许我将不同格式的文件添加到流.因此,流由许多文件组成,这些文件是XML文件,但基本上有不同的模式.我有一个表单允许用户添加他们想要的任何文件,我正在使用STI(当数据已经在表中时效果很好),我的麻烦是将数据添加到表中.
表单有1个输入字段,只有一个file_field,允许用户选择要上传的文件.由于我只有一个表单,我无法实例化正确的对象,我必须以编程方式进行...而且我不知道该怎么做.
我只是(或者我可以)添加可能类型的下拉列表,并调用该字段'type',以便在提交表单时,rails将实例化对象的写入类型,因为提供了type属性?
这是什么最好的做法..我正在运行rails 2.3.4.
我在http://coderrr.wordpress.com/2008/04/22/building-the-right-class-with-sti-in-rails/#comment-1826找到了解决方案
class GenericClass < ActiveRecord::Base
class << self
def new_with_cast(*a, &b)
if (h = a.first).is_a? Hash and (type = h[:type] || h['type']) and (klass = type.constantize) != self
raise "wtF hax!!" unless klass < self # klass should be a descendant of us
return klass.new(*a, &b)
end
new_without_cast(*a, &b)
end
alias_method_chain :new, :cast
end
end
Run Code Online (Sandbox Code Playgroud)
这对我来说用最少的代码工作得很好 - 我不知道它是否很黑客,但它有效,而且相当干净。我喜欢它只有 10 行左右的代码。
| 归档时间: |
|
| 查看次数: |
3015 次 |
| 最近记录: |