我已经设置了一个使用单表继承的 Rails 应用程序,但我需要为我的子类设置一个不同的表单。该应用程序保留了一系列安全威胁指标,例如恶意 IP 地址。所以我有一个名为 Indicator 的类,它包含大部分信息。但是,如果指标是恶意软件哈希,我需要收集更多信息。所以我创建了另一个名为 MalwareIndicator 的类,它继承自 Indicator。一切都很好。
我希望我的路线安静且看起来不错,所以我在 config/routes.rb 文件中有这个
resources :indicators
resources :malware, :controller => "indicators", :type => "MalwareIndicator"
这很好用。我有所有这些路由都指向我的单个控制器。但是在控制器中我不确定如何处理多种形式。例如,如果有人去恶意软件/新的指标#New 函数被调用,它能够找出用户想要创建一个 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
我觉得我很接近。另一方面,我可能做错了所有事情,所以如果有人想扇我一巴掌并说“别当个笨蛋”,我也会感激不尽。