【问题标题】:Nest a Controller / URL嵌套控制器 / URL
【发布时间】:2013-09-19 19:25:25
【问题描述】:

我有一个Albums Scaffold 并且给定相册的当前Show Action URL 是:

http://localhost:3000/albums/Test

因此任何给定的专辑属于用户,我正在努力设置嵌套链接(?),因此网址看起来像这样:

http://localhost:3000/user/albums/Test

不久前,当我为 Devise Users 制作我的 用户个人资料页面时,我将路线更改为:

# User Profile
get "users/show"
get 'user/:id' => 'users#show', as: :user

我试图为专辑模仿这个动作,但没有。

整个想法是:

要保持albums_path 不变,以便可以从localhost:3000/albums 中查看专辑,就在打开专辑时(显示)然后url 更改为localhost:3000/user/testuser/albums/albumname。

有了这个,我试图避免专辑名称中的重复,因为会有很多。

【问题讨论】:

    标签: ruby-on-rails controller ruby-on-rails-4 nested


    【解决方案1】:

    你可以这样做:

    get ':user_id/albums/:name', :to => 'albums#show', :as => :album
    

    要在视图中访问它,您将传递以下内容:

    Check out my band's new <%= link_to @album.name, album_path(user_id: X, name: @album.name) %>
    

    在 url 中它看起来像这样:

    http://localhost:3000/2/albums/Music_for_Airports 
    #note that the formatting for the album name could be tricky to get right!  
    

    【讨论】:

    • 呃,我不太明白album_path 的去向。专辑名称的格式目前是通过 def to_param :name,对于用户也是如此。
    • 哦,我明白了。但是我是否必须将我的应用程序中的每个链接都更改为此?没有办法自动为相册设置默认值吗?
    • 我不确定我是否理解?默认是什么?
    • 对于相册 url,因此相册只能由用户创建并且属于用户,是否可以设置默认路由,以便相册在 url 中的用户之后。本地主机:3000/user/albums/name
    • 啊,我明白了——你可以使用namespaces——但我认为你有点误解了路由。相册只能属于一个用户,但应用程序有很多用户,所有用户都有相册 - 所以你需要定义你正在谈论的用户,我向你展示的路线是最直接的方法.
    【解决方案2】:

    还有另一种方法可以做到这一点。我想到的事情是这样的

    resource :users do
      resources :albums
    end
    

    但这仍会将您的 link_path 参数更改为 user_albums_path。

    【讨论】:

    • 我必须在哪里更改链接路径参数,因为仅在视图文件中更改它是行不通的:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2013-01-18
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多