Ruby on rails 3 Rails 3路线范围和/或嵌套

Ruby on rails 3 Rails 3路线范围和/或嵌套,ruby-on-rails-3,routing,scope,nested,permalinks,Ruby On Rails 3,Routing,Scope,Nested,Permalinks,我无法确定我不想嵌套的路由的范围 我有以下路线: resources :foos resources :bars resources :bazs do resources :hellos resources :worlds end foo、bar和baz模型都属于用户模型。我不想嵌套另一层,但我确实希望在url中有一个前缀,对应于用户的permalink属性(类似于每个以用户名为前缀的github repo)。所以我的所有控制器上都有一个前置过滤器 def

我无法确定我不想嵌套的路由的范围

我有以下路线:

  resources :foos
  resources :bars
  resources :bazs do
    resources :hellos
    resources :worlds
  end
foo、bar和baz模型都属于用户模型。我不想嵌套另一层,但我确实希望在url中有一个前缀,对应于用户的permalink属性(类似于每个以用户名为前缀的github repo)。所以我的所有控制器上都有一个前置过滤器

  def get_scope
    @user = User.find_by_permalink(params[:permalink])
  end
由于@cowboycoded,已修改为_参数

  class User < ActiveRecord::Base  
    def to_param
      permalink
    end
  end
现在,只要我将@user传递给每个非索引路由,一切都正常。当(@user,@foo)的作用域已经确定时,必须返回到我所有的视图并用(@user,@foo)替换(@foo),这似乎不是很枯燥

除非我弄错了,否则to_param方法只是替换:id,这样像/users/:id这样的URL就会显示为users/permalink,而不是users/1。我试图在我的作用域中使用这个:id,但它与foo的:id参数冲突并破坏了一切。也许有一个连接到我错过的路径


谢谢你的建议

您是否尝试过在模型中使用to_param方法?这将允许您覆盖默认值并使用id以外的其他内容,并且可以使用URL帮助程序

文档中的示例:

class User < ActiveRecord::Base
  def to_param  # overridden
    name
  end
end

user = User.find_by_name('Phusion')
user_path(user)  # => "/users/Phusion"
class用户“/users/Phusion”

我不确定这对scope有多好,因为我还没有尝试过,但我想值得一试。

合并了路径辅助解决方案和to_param方法。
class User < ActiveRecord::Base
  def to_param  # overridden
    name
  end
end

user = User.find_by_name('Phusion')
user_path(user)  # => "/users/Phusion"