使用Rails url_for帮助程序生成意外的嵌套路由

时间:2017-05-24 08:08:33

标签: ruby-on-rails ruby-on-rails-5 rails-routing

我使用Rails 5,我的路线看起来像:

Rails.application.routes.draw do
    namespace :admin do
      namespace :moderation do
        resources :templates
      end

      resources :users, except: [:new, :create] do
        namespace :moderation do
          resources :messages, only: [:index, :show, :new, :create, :update, :edit] do
            resources :message_replies, only: [:create, :edit, :update]
          end
          resources :templates
        end
      end

      root "home#index"
    end
end

我有models/admin/user.rb

module Admin
  class User < ::User
  end
end

models/admin/moderation/template.rb

module Admin
  module Moderation
    class Template < ::Moderation::Template
    end
  end
end

现在,当我尝试使用url_for帮助程序生成正确的路径时:

2.4.1 (main):0 > admin_user = Admin::User.first
2.4.1 (main):0 > admin_moderation_template = Admin::Moderation::Template.first
2.4.1 (main):0 > url_for([admin_user, admin_moderation_template])
NoMethodError: undefined method `admin_user_admin_moderation_template_url' for main:Object

而不是admin_user_moderation_template_url我获得admin_user_admin_moderation_template_url。在这种情况下我应该如何生成正确的路线?

1 个答案:

答案 0 :(得分:0)

我想知道您是否可以使用此xxx_url()帮助程序解决问题。在你的情况下,它是:

admin_user_moderation_template_url( user_id: admin_user.id, id: admin_moderation_template.id ) 

修改

不幸的是我无法尝试,因为我必须构建您正在使用的应用程序。但正如this answer中所述,您可以使用符号来创建admin_user_moderation_template_url

尝试运行以下行并告诉我它是否有效(我不确定user_id是否处于正确的位置,但它可能有效)。

url_for( [:admin, :user, :moderation, :template, user_id: admin_user.id, id: admin_moderation_template.id ])

您还需要用户和模板之间的关联才能链接它们。