Ruby on rails 动态确定收集路径是否存在

Ruby on rails 动态确定收集路径是否存在,ruby-on-rails,Ruby On Rails,这似乎是一个不寻常的案例 如果动态地给我一个“@model”变量,它可以是任何ActiveRecord模型类,我如何检查该模型是否有相应的“/models”路由 有时,模型是另一个资源中的浅层资源。。。这意味着它本身从来没有“/models”路径,因此该路径的url\u帮助程序将不存在 我可以这么做,但太糟糕了 Rails.application.routes.url_helpers.methods.include? "#{@model.to_s.pluralize.downcase}_path

这似乎是一个不寻常的案例

如果动态地给我一个“@model”变量,它可以是任何ActiveRecord模型类,我如何检查该模型是否有相应的“/models”路由

有时,模型是另一个资源中的浅层资源。。。这意味着它本身从来没有“/models”路径,因此该路径的url\u帮助程序将不存在

我可以这么做,但太糟糕了

Rails.application.routes.url_helpers.methods.include? "#{@model.to_s.pluralize.downcase}_path"

我建议将简单资源与嵌套资源分开。然后你只需要处理一种路由(简单路由)。从Admin::Base控制器继承控制器,如:

class Admin::BaseController < ApplicationController
  # abstracted admin logic
end

class Admin::PeopleController < Admin::BaseController
end
class Admin::CategoriesController < Admin::BaseController
end
class Admin::BaseController
并在视图中使用多态路径,如:

<%= link_to 'all', @model_object.class.name.underscore.pluralize %>
<%= link_to 'show', @model_object %>
<%= link_to 'new', [:new, @model_object] %>
<%= link_to 'edit', [:edit, @model_object] %>
<%= link_to 'delete', @model_object, method: :delete %>
<%= form_for @model_object do |f| %>
  <!--Create or Update form for model object-->
<% end %>

还可以阅读多态路由:。

如果可能,我会使用现有的管理宝石,如或。通常它们足够了。

您使用STI吗?或者为什么您的模型对象可以全部输入,也可以不输入?我正在查看的代码使用干式控制器。这很好,但在某些地方有太多的巫毒。希望有一种更简单的方法来检测集合的路由。