【问题标题】:Rails routing, index and show are the same?rails的路由,index和show都一样吗?
【发布时间】:2018-03-25 20:30:48
【问题描述】:

我正在我的网站上构建一个画廊,但我对控制器中的路由和相关操作有点卡住了。

基本上我有三个模型:CollectionAlbumPhoto

Collection 可以包含其他 Collections 或 Albums 但不能同时包含两者。一个Album 然后包含Photos。

在我的根/gallery 路径中,我路由到索引视图。这将传递具有 nil parent_id 集的集合列表并显示视图。一切顺利。

现在,我想链接这些集合标题,以便将集合的 id 传回。此时,我通常需要使用“gallery_collection_path”的链接帮助器,但这会直接指向显示视图。在我的情况下,索引和显示视图看起来是相同的,直到我进入包含专辑的集合,然后我将在专辑索引视图中。

我遇到困难的地方是如何在我的路由文件中构造它以及集合名称上的 link_to 应该是什么样的。

目前在我的routes.rb 文件中:

  namespace :gallery do
    get 'collections/:collection_id', to: 'collections#index'
    root to: 'collections#index'
  end

但我不认为这是正确的。我尝试使用url_for 来生成这样的 URL:

<%= link_to collection.title, url_for(['gallery', 'collections', collection.id]) %>

但我不断收到以下错误:

undefined methodto_model' for 71:Fixnum`

谁能把我推向正确的方向?

【问题讨论】:

    标签: ruby-on-rails url routing


    【解决方案1】:
    # config/routes.rb
    namespace :gallery do
        resources :collections, only: [:index, :show] do
           resources :albums, only: [:show]
        end
    end
    

    您可以使用 url 助手: 索引:gallery_collections_path, gallery_collections_url 显示:gallery_collection_path(id), gallery_collection_url(id)

    而对于辅助方法url_for,可以参考这里:https://apidock.com/rails/ActionController/Base/url_for

    编辑: 如果需要将Album和Collection的逻辑和视图分开,则需要定义Album控制器并设置路由。

    【讨论】:

    • 谢谢,但是当我得到专辑时呢?我使用什么动作?另外,show 操作是嵌套集合的索引操作的问题呢?
    • 使用上面的路由配置,显示操作与索引操作不同。但是使用您的配置 get 'collections/:collection_id', to: 'collections#index' ,显示操作将被路由到索引操作。
    • 是的,但专辑可能嵌套在多个子集合中。一个顶级集合显然会被路由到所有其他顶级集合的索引,但第二级是去索引(显示那里的所有集合还是在我们显示该集合时显示。这是我的问题?
    • Collections#index 将显示所有集合。它与顶级与否无关。当显示一个集合时,我们会将用户重定向到 Collections#show。
    • 但是显示一个集合肯定会以与集合的索引视图相同的视图结束(除非它包含专辑,否则它将是专辑的索引视图)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2014-02-08
    相关资源
    最近更新 更多