0

Rails 4では、3つのモデルがあります

class Tag < ActiveRecord::Base
  # attr_accessible :id, :name
end
class Category < ActiveRecord::Base
  # attr_accessible :id, :name
end

class Product < ActiveRecord::Base
  # attr_accessible :id, :name
  belongs_to :tag
  belongs_to :category
  delegate :tag_name, to: :tag
  delegate :category_name, to: :category
end

これで、タグid: 1, name: "tag1"とカテゴリid: 1, name: "category1"があり、製品がありますname: "product1", tag_id: 1, category_id: 1

route toとURLproductの両方を一致させたい。元:tagcategory

/tag1/category1/product1
/category1/tag1/product1
/tag1/product1
/category1/product1
/product1

しかし、それを自動的に追加する方法がわかりません。( friendly_idURL をより使いやすくするために gem を使用しています)ルートを一致させるために使用する投稿を次に示しますが、必要に応じて動的ではありません。tagと だけでcategoryなく も...の要件が非常に急速に増加しsub_category、増加しない場合super_categoryroutes.rbDRY

誰か私に別の提案をしてもらえますか?

4

1 に答える 1

0

これがあなたが望むものの醜い解決策です:

#routes.rb
match "(:first_id)/(:second_id)/(:third_id)", to: "home#index", via: :get

あなたが言及したように、最後のパラメーターが必要であり、それが製品IDになります。したがって、最後の 1 つを取得する必要があります。

#home controller
def index
  product_id = case 
  when params[:third_id].present?
    params[:third_id]
  when params[:second_id].present?
    params[:second_id]
  when params[:first_id].present?
    params[:first_id]
  end
 @product = Product.find(product_id)
end
于 2013-10-31T11:41:51.210 に答える