【问题标题】:padrino: sub app and controller with same name produces redundant urlpadrino:具有相同名称的子应用程序和控制器产生冗余 url
【发布时间】:2012-02-04 04:04:00
【问题描述】:

我有一个帕德里诺项目。

我创建了一个名为“users”的子应用。

我还有一个名为 user 的模型和一个名为 users 的控制器来处理路由。

Users.controllers :users do

问题在于生成和响应的网址是

app.com/users/users/index 等等

除非我去每个动作并映射它

get :index, :map => '/' do

有更好的方法吗?

我真的不想将操作放在应用程序的 app.rb 中。即使这样效果很好。我喜欢分开。

有没有类似的

Users.controllers :users do
    map '/'
end

是否有我可以遵循的命名约定来创建响应我的应用根 URL 的默认控制器?

我想将它保存在用户控制器中,以便我可以使用 users_index 等

捆绑包中包含的宝石:

activemodel (3.2.1)
activerecord (3.2.1)
activesupport (3.2.1)
arel (3.0.0)
bcrypt-ruby (3.0.1)
builder (3.0.0)
bundler (1.0.21)
haml (3.1.4)
http_router (0.10.2)
i18n (0.6.0)
mail (2.3.0)
mime-types (1.17.2)
multi_json (1.0.4)
padrino (0.10.6.c)
padrino-admin (0.10.6.c)
padrino-cache (0.10.6.c)
padrino-core (0.10.6.c)
padrino-gen (0.10.6.c)
padrino-helpers (0.10.6.c)
padrino-mailer (0.10.6.c)
polyglot (0.3.3)
rack (1.4.1)
rack-protection (1.2.0)
rack-test (0.6.1)
rake (0.9.2.2)
sass (3.1.13)
shoulda (2.11.3)
sinatra (1.3.2)
sinatra-flash (0.3.0)
sqlite3 (1.3.5)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
tzinfo (0.3.31)
url_mount (0.2.1)

当我的应用名称与控制器名称匹配时,如果我必须为控制器中的每个操作映射路径,那很好。我只是想知道是否有办法通过控制器为我的所有操作设置基本路径或根路径。

谢谢

【问题讨论】:

    标签: controller url-routing padrino


    【解决方案1】:
    #padrino-core-0.10.6.c/lib/padrino-core/application/routing.rb
    
    #around line 655
    #method parse_route
    
    #right after unless controller.empty? i added the following which works in my case
    
       if controller.last.downcase == app_name.downcase and map.blank?
        controller = controller.slice(0, -2) unless controller.length == 1
        controller_path = controller.join("/")
        path.gsub!(%r{^\(/\)|/\?}, "")
        map = File.join(controller_path, path)
    end
    

    所以现在如果我有一个名为 Users 的应用程序和一个名为 Users 的控制器来处理路由,我可以只说 /users 或 /users/new 等而不是 /users/users/new。

    再说一次,我对此很陌生,所以我不知道这是否是处理这个问题的最佳方法。我本可以在每条路线中手动设置地图,但这会很烦人。

    我希望 DAddYE 能够重视这一点并提供更好的建议。

    【讨论】:

      【解决方案2】:

      可以直接使用:

      get "/" do
      end
      

      【讨论】:

        猜你喜欢
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        • 2013-02-22
        • 2016-05-10
        • 2013-06-14
        • 2015-03-12
        • 2014-08-26
        • 2012-11-01
        相关资源
        最近更新 更多