You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 5.2带Administration命名空间的控制器如何基于对象类生成正确路由

问题原因

路由生成异常是因为Rails多态路由默认会根据模型类名匹配路由,你的User、Group模型没有加Administration命名空间,所以生成路径时不会自动带上/administration前缀。


解决方案1(最推荐,无副作用)

直接在路由数组的最前面加上命名空间标识:administration,修改你的_object_actions.erb代码如下:

<% if this_object.is_active %>

  <%= link_to [:administration, :edit, this_object], method: :get, class: "mat-flat-button mat-button-base mat-primary" do%>
    <span class="fa fa-edit"></span>
    <%= t("Edit") %>
  <% end %>

  <%= link_to [:administration, this_object], data: { confirm: t("Sure") }, method: :delete, class: "mat-flat-button mat-button-base mat-warn" do%>
    <span class="fa fa-trash"></span>
    <%= t("Destroy") %>
  <% end %>

<% else %>

  <%= link_to [:administration, :activate, this_object], method: :post, class: "mat-stroked-button mat-button-base" do%>
    <span class="fa fa-trash-restore"></span>
    <%= t("Recall") %>
  <% end %>

<% end %>

同时需要在routes.rb中补充activate动作的成员路由,并且删掉多余的users index路由声明(resources已经自动生成了index路由):

namespace :administration do
  resources :users do
    post :activate, on: :member
  end
  resources :groups do
    # 如果groups也需要激活功能,同样加这行
    post :activate, on: :member
  end
end

解决方案2(全局生效,适合管理后台独用的模型)

如果你确定整个应用里User、Group模型的路由都要走administration命名空间,可以直接修改模型类的路由映射规则,不需要改动视图代码:

class User < ApplicationRecord
  # 告诉路由生成器这个模型对应administration命名空间下的users资源
  def self.model_name
    ActiveModel::Name.new(self, nil, "Administration/User")
  end
end

# Group模型同理做相同修改

这种方法不推荐混用前台、后台路由的场景,会导致前台路由生成也带上administration前缀。

内容的提问来源于stack exchange,提问作者user1185081

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:36:01