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

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

最好,
E.

最佳答案

首先,通过在超类级别上实现,您绝对可以在子类之间共享功能-这是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

关于ruby-on-rails - 如果某些子类缺少模板,rails重定向到父类(super class)的模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4204302/

10-09 05:53