加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:04:13 所属栏目:百科 来源:网络整理
导读:我有一个多态关联,如下所示: class Line ActiveRecord::Base belongs_to :item,:polymorphic = trueendclass Education ActiveRecord::base has_many :lines,:as = :itemendclass Work ActiveRecord::base has_many :lines,:as = :itemend 我想要一个简单的
我有一个多态关联,如下所示:
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/

干杯,一个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读