2012-07-19 160 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類。