我该如何设计嵌套网址?

时间:2012-12-24 18:03:55

标签: ruby-on-rails ruby-on-rails-3 routing

现在,我正在设置我的嵌套路由 但在这种情况下,

  • example.com/shop/walmart/topic/1 < =如果我是第一次创建主题
  • example.com/shop/bestbuy/topic/2 < =如果我第二次创建主题
  • example.com/shop/walmart/topic/3 < =如果我第三次创建主题

尽管事实上只有2条记录属于沃尔玛商店
该ID将显示为'3'
如何将此ID作为计数样式?我应该准备另一个专栏吗?

resources :communities, :path => "shop", do
resources :community_topics, :path => "topic", :as => :'topic'
end

1 个答案:

答案 0 :(得分:1)

如果网址中的数字是记录的id真的是否重要?如果这对您很重要,您可以制作一个与您的商店slu“”walmart“,”bestbuy“等类似的”slug“。您必须在主题表中创建一个新列并使用before_create过滤器增加该值。像这样:

class Topic
  before_validation :increment_slug, :on :create
  validates_uniqueness_of :slug, scope: :shop_id

  private
  def increment_slug
    self.slug = Topic.where("shop_id = ?", shop_id).order("slug DESC").limit(1).slug + 1
  end
end

确保'slug'在这里是一个数字字段,以便+和排序正常工作。