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/ 干杯,一个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |