我正在重构我的应用程序,以便现在在专用的Administration名称空间中管理用户。我做了以下操作:
routes.rb
namespace :administration do
get 'users', to: "/administration/users#index"
resources :users
resources :groups
end
组和控制器现在在app/controllers/administration文件夹中。它们被定义为Administration::UsersController和管理:GroupsController. 模型没有命名空间。
相关链接现在基于administration_users_path和administration_groups_path.
我使用一些偏导数来协调布局。其中一个显示Edit和删除按钮,其中this_object表示传递给local的实例:
_object_actions.erb
<% if this_object.is_active %>
<%= link_to [ :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 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 [ :activate, this_object], method: :post, class: "mat-stroked-button mat-button-base" do%>
<span class="fa fa-trash-restore"></span>
<%= t("Recall") %>
<% end %>
<% end %>
但是说到用户和组,操作的路径没有正确构建。我需要构建URL,如/administration/users/1/edit,但实际上是/users/1/edit.
我如何确保为此目的构建正确的URL ?
多亏了这篇Rails使用link to与命名空间路由的文章,我明白了可以向link_to方法添加更多参数来构建实际的链接。
为了调用命名空间控制器方法,我在链接中添加了以下内容:<%# Check if the parent is a module defined as Namespace. If not (Object) then display default link %>
<% namespace = controller.class.parent.name == 'Object' ?
nil :
controller.class.parent.name.downcase %>
<% if this_object.is_active %>
<%= link_to [ :edit, namespace, 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 [namespace, 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 [ :activate, namespace, this_object],
method: :post,
class: "mat-stroked-button mat-button-base" do %>
<span class="fa fa-trash-restore"></span>
<%= t("Recall") %>
<% end %>
<% end %>
您可以为每个link_to
指定所需的路由
<%= link_to "Edit", edit_administration_user_path(this_object) %>