【问题标题】:Rails nested resource route on columnRails 在列上嵌套资源路由
【发布时间】:2017-06-15 16:52:56
【问题描述】:

我有一个名为Product 的模型,它有一个名为category 的字段。 如何使用 category 字段为 Product 模型创建嵌套资源路由?
例如:

/category1/ --> index products with 'category = category1'
/category2/13 --> show product '13' with 'category = category2'
/categories/ --> show overview of categories

【问题讨论】:

  • 我希望我的问题质量不错; stackoverflow 上的新功能

标签: ruby-on-rails ruby routing


【解决方案1】:

你可能会做得很好:

resources :products do
  resources :categories
end

然后你会得到像 new_product_category_path 这样的路由助手,并且你的产品类别可以通过像 /products/:id/category/:id 这样的 URL 访问

“Rails”的做法是在 product.rb 中: has_many :categories。 为此,您需要在产品表中添加一个 category_id

在 category.rb 中 belongs_to :product

所有这些都假设一个产品只有一个类别。如果没有,您必须设置一个连接表,在这种情况下,您应该查看 has_manyhttp://guides.rubyonrails.org/association_basics.html#the-has-many-through-association 上的文档

【讨论】:

    【解决方案2】:

    据我所知,您必须手动完成每条路线

    get   '/:category/',         to: "products#index"
    get   '/:category/:id',      to: "products#show"
    get   '/:category/new',      to: "products#new"
    get   '/:category/:id/edit', to: "products#edit"
    match '/:category/:id',      to: 'products#create', via: :post
    match '/:category/:id',      to: 'products#update', via: [:put, :patch]
    match '/:category/:id',      to: 'products#destroy', via: :delete
    

    对于您的第一个示例,/category1/ 将在控制器中将 params[:category] 设置为 "category1"

    对于您的第二个示例,/category2/13 将在控制器中将 params[:category] 设置为 "category2" 并将 params[:id] 设置为 13

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多