在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
我想在网址中将product
和tag
的路由与category
匹配。例如:
/tag1/category1/product1
/category1/tag1/product1
/tag1/product1
/category1/product1
/product1
但不知道如何自动添加它。 (我使用friendly_id
gem来使URL变得更友好)
这里是我用来匹配路线的post,但它不是我想要的动态。如果要求不仅tag
和category
,还有sub_category
,super_category
... routes.rb
将会非常快速地增加DRY
}}
有人可以给我另一个建议吗?
答案 0 :(得分:0)
这是你想要的丑陋解决方案:
#routes.rb
match "(:first_id)/(:second_id)/(:third_id)", to: "home#index", via: :get
正如您所提到的,您需要最后的参数,这将是产品ID。所以我们只需要获得最后一个。
#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