我有一个多态资源Location
可以锁定,例如Store
的实例。这个“应该”成为多态资源的程度是值得怀疑的,但这是目前的重点。
位置通过location.locatable
访问其多态父级。
由于该位置始终是商店等资源的子项,因此我想删除到POST /locations
的路由,而是将应用程序直接发送到/stores/1/locations
。
现在,处理多态关联时的默认Rails方法是在控制器级别使用
进行处理def new
@location = Store.find(params[:store_id]).vendors.new
end
正如预期的那样,预填充location.locatable_id
和location.locatable_type
。精彩。但它默认仍会路由到locations_path
,我想摆脱它。
我试试,它引发了一条找不到错误的路线。
那么我如何准备一个可扩展给新父母的一般location
表格?
我来到以下地方:
form_for(@location, :url => [@location.locatable, @location]) do |l|
这似乎工作得很好,但作为一个数组的路径传递让我感到烦恼,由于某种原因,我找不到关于这个主题的任何documentation。有没有更好的方法来实现这一目标?我是多态资源的新手,从一开始就做这件事会很好。
此外,一个(相当)次要的外围问题是,由于Rails实际上试图找到@location.locatable
,因此这与开箱即用的默认RSpec生成的视图规范不合作。这很容易解决。我打算从上到下重写视图规范。