【问题标题】:Rails 3 route scoping and/or nestingRails 3 路由范围和/或嵌套
【发布时间】:2011-02-26 04:12:06
【问题描述】:

我在确定不想嵌套的路由范围时遇到问题。

我有以下路线:

  resources :foos
  resources :bars
  resources :bazs do
    resources :hellos
    resources :worlds
  end

foo、bar 和 baz 模型都属于一个用户模型。我不想嵌套另一层,但我确实希望在我的 url 中有一个与用户的永久链接属性相对应的前缀(类似于以用户名为前缀的每个 github 存储库)。所以我在所有控制器上都有一个前置过滤器

  def get_scope
    @user = User.find_by_permalink(params[:permalink])
  end

感谢@cowboycoded 修改了to_param

  class User < ActiveRecord::Base  
    def to_param
      permalink
    end
  end

我用

包裹了这些路线
  scope ":permalink", :as => :user do
    #nested routes here
  end

只要我将@user 传递给每个非索引路由,现在一切正常。回到我的所有视图并在已经确定范围时将 (@foo) 替换为 (@user, @foo) 似乎并不是很枯燥。

除非我弄错了,否则 to_param 方法只是替换 :id 以便 /users/:id 等 URL 显示为 users/permalink 而不是 users/1。我试图在我的范围内使用这个 :id ,但它与 foo 的 :id 参数冲突并破坏了一切。也许与我缺少的路径有联系?

感谢您提出的任何建议!

【问题讨论】:

  • 结合了路径辅助解决方案和 to_param 方法。

标签: ruby-on-rails-3 routing scope nested permalinks


【解决方案1】:

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

http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-i-to_param

文档示例:

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

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

我不确定这对范围的影响如何,因为我没有尝试过,但我想它值得一试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 2011-09-07
    • 2011-09-19
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多