【问题标题】:polymorphic_path for custom collection route自定义收集路径的 polymorphic_path
【发布时间】:2011-05-26 16:37:16
【问题描述】:

我有以下路线定义:

resources :documents do
  collection do
    post :filter
  end
end

以及以下模型结构:

class Document < ActiveRecord::Base
  belongs_to :documentable, :polymorphic => true
end

class User < ActiveRecord::Base
  has_many :documents, :as => :documentable
end

和控制器结构:

class DocumentsController < ApplicationController
  def index
    # not important
  end

  def filter
    # not important
  end
end

我可以很容易地在一个视图中说:

polymorphic_path([@user, Document])

获取路径/users/1/documents,但我想说的是:

filter_polymorphic_path([@user, Document])

获取路径/users/1/documents/filter,不幸的是,这不起作用。

对于我的每个 可记录 模型,任何人都知道如何在不向路线添加以下内容的情况下完成此任务:

resources :users do
  resources :documents do
    collection do
      post :filter
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 routes polymorphic-associations custom-routes


    【解决方案1】:

    polymorphic_path([@user, Document], :action =&gt; 'filter') 给你/users/:user_id/documents/filter

    另外,polymorphic_path([@user, Document], :action =&gt; 'filter', :sort_order =&gt; 'this-order') 给你/users/:user_id/documents/filter?sort_order=this-order

    我遇到了同样的问题,认为您可以将edit_polymorphic_path 中的edit 替换为您想要的任何方法。

    见:http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html

    【讨论】:

      【解决方案2】:

      这样就可以了,而且读起来很好。

      polymorphic_path([:filter, @user, Document])
      

      或者这些

      polymorphic_path([:filter, @user, :documents])
      polymorphic_path([:filter, @user, Document.new])
      

      还有一个查询参数

      polymorphic_path([:filter, @user, Document], :q => 'keyword')
      

      而且,在视图中你也可以这样做:

      = link_to "Documents", [[:filter, @user, :documents], :q => 'keyword']
      

      【讨论】:

        猜你喜欢
        • 2011-01-16
        • 2022-01-26
        • 1970-01-01
        • 2017-06-19
        • 1970-01-01
        • 2012-02-21
        • 2021-04-07
        • 2013-04-24
        • 2017-06-16
        相关资源
        最近更新 更多