Ruby on Rails:动态多路径到一个页面

时间:2013-10-31 10:40:44

标签: ruby-on-rails ruby ruby-on-rails-4 friendly-id

在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

我想在网址中将producttag的路由与category匹配。例如:

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

但不知道如何自动添加它。 (我使用friendly_id gem来使URL变得更友好) 这里是我用来匹配路线的post,但它不是我想要的动态。如果要求不仅tagcategory,还有sub_categorysuper_category ... routes.rb将会非常快速地增加DRY }}

有人可以给我另一个建议吗?

1 个答案:

答案 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