如果某些子类缺少模板,rails会重定向到超类的模板

时间:2010-11-17 12:24:33

标签: ruby-on-rails model-view-controller inheritance dry single-table-inheritance

我正在为rails项目使用Single-Table-Inheritance。我想知道是否有可能通过在超类中实现它们来共享子类之间的一些常见函数的功能。

是否可以回收超类的视图?或者我应该为常用功能编写新视图?这不会很干。什么是DRY方法?我应该编辑routes.rb还是有其他方法来动态完成此操作?

最佳, 即

1 个答案:

答案 0 :(得分:0)

首先,您可以通过在超类级别实现来明确地在子类之间共享功能 - 这是STI的一大吸引力。

至于视图问题:我假设我们正在讨论的是对模型进行子类化,而不是控制器。在这种情况下,主模型的单个控制器(具有普通视图)通常适用于所有子类。当涉及到表单和创建/编辑时,有一些稍微棘手的问题。特别是,您需要从参数中提取模型的子类,并在更新其他所有内容后添加它。例如:

def create
  citation_class = params[:citation].try(:delete, :type)
  @citation = citations.new(params[:citation])
  @citation.type = citation_class
  flash[:notice] = 'Citation was successfully created.' if @citation.save

  respond_with @citation
end