2012-07-19 114 views
0

我已经设置了使用单表继承Rails应用程序,但我必须为我的孩子一类独特的形式,3个单表继承。该应用程序保留了一系列安全性折中指标,例如恶意IP地址。所以我有一个名为Indicator的类,其中包含大部分信息。但是,如果该指标是恶意软件散列,我需要收集其他信息。于是我创建了另一个名为MalwareIndicator的类,它继承了Indicator。一切工作正常。轨多种形式

我希望我的路线是休息和好看,所以我有这个在我的config/routes.rb中文件

resources :indicators 
resources :malware, :controller => "indicators", :type => "MalwareIndicator" 

那个非常漂亮的作品。我有所有这些路线指向我的单一控制器。但是,在控制器中,我不确定如何处理多个表单。例如,如果有人去恶意软件/新的指标#新的函数被调用,它是能够找出用户想要创建一个MalwareIndicator。那么,为了将用户发送到正确的表单,我的respond_to块应该是什么样的?现在它仍然将用户发送到新的指标表单。

def new 
    if params[:type] == "MalwareIndicator" 
     @indicator = MalwareIndicator.new 
    else 
     @indicator = Indicator.new 
    end 
    @pagename = "New Indicator(s)" 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @indicator } 
    end 
    end 

我觉得我很亲密。在另一方面,我可能会做一切错了,所以如果有人想打我,并说“跳槽是一个蠢蛋”我对此表示感谢,以及。

回答

0

我认为自己处理它。恶意软件的路由条目导致控制器接收类型参数,并且控制器使用它来创建正确类的实例。在new.html.erb文件我把这个底:

<%= render :partial => @indicator.class.to_s.downcase %> 

因此,如果MalwareIndicator是由控制器创建然后@ indicator.class.to_s.downcase将返回malwareindicator。我有一个名为_malwareindicator.html.erb的部分文件,它具有正确的格式。

因此,如果我必须创建Indicator类的另一个后代,我可以向路由文件中添加另一个资源条目并创建一个名为_whateverindicator.html.erb的部分,它应该可以解决问题。

1

我通常尽量避免性病,因为只有与烦恼(使用不同的属性和第四图像第三indcator和第五更多的领域,你意识到之前你结束了巨大的表,其中大多数列是未使用的)。要回答你的问题:你可以为不同类别不同new观点和这样回应:

respond_to do |format| 
    format.html { render action: "new_#{@indicator.class.to_s.underscore}" } 
    format.json { render json: @indicator } 
end 

应该呈现new_indicator.html.erbnew_malware_indicator.html.erb取决于@indicator类。