使用具有嵌套关联的多态路径
我有一个多态关联,看起来像这样:
class Line true end class Education :item end class Work :item end
我想要一种从父项创建新行的简单方法。 因此,我可能正在编辑Work对象的视图,并希望有一个创建新Line对象的链接。 通常,我会这样做:
帮助者将为此工作。 但是,这需要我在控制器中检查Line属于哪个父级,从而破坏了多态的目的(如果是这种情况,我可以使用两个引用)。 所以,我的问题是,我如何像普通的路径助手那样以多态方式工作?
一种可能的方法是使用这样的路线:
map.resources :works do |works| works.resources :lines end map.resources :educations do |edu| edu.resources :lines end
你的LinesController保持不变,你会得到这样的路线:
work_lines GET /works/:work_id/lines .... education_lines GET /educations/:education_id/lines ...
最烦人的部分是管理传递的第一个id,因为你有一个params[:id]
引用一个Line,但你也会有params[:work_id]
或params[:education_id]
。 在这里你必须在检查传递哪个参数之间做出选择,或者至少解析所请求的url以确定你在哪个(工作,教育等等)。
希望这有帮助;)
编辑:
根据评论中出现的内容,您可以使用polymorphic_url
/ polymorphic_path
( http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html ):
如果你像这样使用它们是有道理的:
link_to "New Line", polymorphic_url(@line.item,@line) # => //item_id/lines/line_id
至少,你甚至可以将它用于collections:
link_to "New Line", polymorphic_url(@line.item,Line.new) # => //item_id/lines/
干杯,
一个。