ruby-on-rails – 使用具有嵌套关联的多态路径

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 使用具有嵌套关联的多态路径前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个多态关联,如下所示:
class Line < ActiveRecord::Base
   belongs_to :item,:polymorphic => true
end

class Education < ActiveRecord::base
   has_many :lines,:as => :item
end

class Work < ActiveRecord::base
   has_many :lines,:as => :item
end

我想要一个简单的方式从父项创建一个新的行.所以,我可能正在编辑一个Work对象的视图,并且想要创建一个创建一个新的Line对象的链接.通常我会这样做:

<%= link_to "New Line",new_work_line_path(@work) %>

帮助者将为此做路线.但是,这要求我检查控制器中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]引用一行,但是你也可以使用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)
# => /<educations_or_works>/item_id/lines/line_id

至少,你甚至可以将它用于集合:

link_to "New Line",Line.new)
# => /<educations_or_works>/item_id/lines/

干杯,一个.

猜你在找的Ruby相关文章