通常人们会通过其父对象构建一个相关的模型实例:
@child = @parent.children.build(params[:child])
但是当我们使用 STI 并且我们想要这样做的同时将其构建为子类之一时,语法似乎会崩溃。据我所知,这是最好的方法(忽略不根据批准列表检查类型的安全问题):
@child = params[:type].classify.constantize.new(params[params[:type]])
@child.parent = @parent
这是最好的方法吗?我使用单个控制器来构建所有不同的子类类型,所以我需要提供类型作为参数。