多个轨道5来自一个控制器的嵌套路由

时间:2017-11-22 20:47:18

标签: ruby-on-rails ruby-on-rails-5 nested-resources

我有类别/子类别/产品的嵌套路线,我的控制器和视图文件也相应地设置,但我现在有一些产品没有子类别。如果可能的话,我如何将某些产品作为一个类别的一部分,而其他产品是一个子类别的一部分?我已经看过很多关于此的帖子,但似乎没有一个帖子能解决我想要做的事情。

当前嵌套路线

const gameObj = {
   '99lEEbmV7s': ['37966', '37966', '37965', '37966', '0'],
   'TggZdsbcje': ['37966', '37966', '37965', '37966', '0']
};

for (let key in gameObj){
    console.log(gameObj[key]);
}

其他需要的嵌套路线

resources :categories do
  resources :subcategories do
    resources :products
  end
end

我当前的产品控制器创建方法

resources :categories do
  resources :products
end

模型

def create
    @category = Category.friendly.find(params[:category_id])
    @subcategory = Subcategory.friendly.find(params[:subcategory_id])
    @product = Product.new(product_params)

    respond_to do |format|
      if @product.save
        format.html { redirect_to category_subcategory_product_path(@category, @subcategory, @product), notice: 'Product was successfully created.' }
        format.json { render :show, status: :created, location: category_subcategory_product_path(@category, @subcategory, @product) }
      else
        ...
      end
    end
  end

1 个答案:

答案 0 :(得分:2)

我在这里要做的是删除子类别模型,让类别属于自己。这将允许您创建类别的嵌套层次结构(如果您愿意,这将允许您更细化)。

class Category
  has_many :categories
  belongs_to :category
  has_many :products
end

class Product
  belongs_to :category
end

任何“顶级”类别的category_id都会nil,而任何子类别都会belong_to现有的类别。

top_level = Category.create(slug: "top_level", category_id: nil)
subcategory = Category.create(slug: "subcategory_1", category_id: top_level.id)
Product.create(category: top_level)
Product.create(category: subcategory)

在您的路线中,您可以制作以下内容:

get "/:category/products", to: "products#index"
get "/:category/:subcategory/products", to: "products#index"