Rails 4:具有非标准标识符的嵌套资源

时间:2013-10-24 09:19:30

标签: ruby-on-rails rails-routing

让我们看看嵌套资源示例,以下是模型:

class Magazine < ActiveRecord::Base
  has_many :ads, :order => 'time_start'
end

class Ad < ActiveRecord::Base
  belongs_to :magazine
end

到目前为止的路由如下:

resources :magazines do
  resources :ads
end

这会自动生成/magazines/:magazine_id/ads/:id等网址。

但是,我想要略有不同的网址方案,更多的是“杂志”中心。常规嵌套URL方案应如下所示:/magazines/:id/:ad_num/component,其中:

  • “:id”是标准生成的路由URL中的“:magazine_id”,是数据库中杂志对象的主键
  • “:ad_num”是一种识别特定杂志中的单个广告的方法,但它是数据库标识符,而是单个杂志中广告数组中的索引
  • 应该没有通用的“show”操作(即/magazines/:id/:ad_num),而是“ad”中有多个组件,使用多个不同的操作显示

我想完全没有AdsController,所有这些路线应指向MagazineController中的各种操作,例如magazines/5/1/title应该指向MagazineController = &GT; title params[:id] = 5params[:ad_num] = 1

。{/ 1}

当然,像title_ad_magazine(@magazine, @ad)这样有用的网址助手最有帮助。

如何在新的Rails路由DSL中执行此操作?

1 个答案:

答案 0 :(得分:1)

您可以使用这样的参数键生成自定义路由

 get '/magazines/:id/:ad_num/title' => 'magazine#title', as: :magazine_ads_title

您将parmams[:id]params[:ad_num]与网址的

部分相匹配

您不需要使用as:选项,但您可能会发现生成直观的网址助手很有帮助