Rails_admin 非常好,但对于某些人的需求来说往往太多了。开发自己的管理部分非常容易。
如何使用 Rails 3.2 创建自己的 RESTful 管理部分
使用 CRUD 为所有模型创建您自己的管理部分,包括使用命名空间的嵌套资源。
示例 - 博客的管理部分 - 模型:帖子、评论(帖子的嵌套资源)
我假设您已经开发了基本的博客应用程序。请参阅http://guides.rubyonrails.org/getting_started.html了解如何设置所有这些。
第一步 - 创建管理部分和控制器
rails g controller admin/admin
这将生成一个空控制器,我们所有的 Admin 控制器都将从该控制器继承。它还将创建可以充当仪表板的views/admin/admin/index.html.erb。
创建管理控制器
rails g controller admin/posts
rails g controller admin/comments
这将在 admin 命名空间中生成一个空的 Admin::PostsController 和一个 Admin::CommentsController
第 2 步 - 为管理控制器添加命名空间转到 config/routes.rb 并添加以下内容
namespace :admin do
root to: "admin#index"
resources :posts do
resources :comments, :only => [:create, :destroy]
end
end
第 3 步 - 编辑管理视图和控制器文件以使用管理命名空间现在我们已经生成了所有内容,我们只需要使其与管理控制器而不是前端一起使用。
更改所有 Admin::*Controllers 的继承。
class Admin::PostsController < ApplicationController => class Admin::PostsController < Admin::AdminController
和
class Admin::CommentsController < ApplicationController => class Admin::CommentsController < Admin::AdminController
将所有模板从 app/views/posts 复制到 app/views/admin/posts 将所有模板从 app/views/comments 复制到 app/views/admin/comments 将所有函数从 posts_controller.rb 复制到 admin/posts_controller.rb 复制所有函数从 comments_controller.rb 到 admin/comments_controller.rb
为您希望管理 CRUD 控制的每个模型添加指向 views/admin/admin/index.html.erb 的链接。比如发帖。
<%= link_to "Posts", admin_posts_path %>
编辑 admin/posts_controller.rb。将 3 个 redirect_to 调用更改为使用 admin 命名空间。创建和更新方法:
redirect_to @post => redirect_to [:admin, @post]
销毁方法:
redirect_to posts_url => redirect_to admin_posts_url
在所有模板中进行类似的更改,以便它们在管理命名空间中使用。您需要进行以下更改:
发布/_form.html.erb:
form_for(@post) => form_for([:admin, @post])
post/ edit.html.erb, index.html.erb, new.html.erb & show.html.erb 查找以下所有实例:
<%= link_to ‘Show’, @post %> => <%= link_to ‘Show’, [:admin, @post] %>
posts_path => admin_posts_path
edit_post_path(@post) => edit_admin_post_path(@post)
new_post_path => new_admin_post_path
<%= render "comments/form" %> => <%= render "admin/comments/form" %>
评论/_comment.html.erb
<%= link_to 'Destroy Comment', [comment.post, comment],... => <%= link_to 'Destroy Comment', [:admin, comment.post, comment],...
评论/ _form.html.erb 更改:
<%= form_for([@post, @post.comments.build]) do |f| %>=> <%= form_for([:admin, @post, @post.comments.build]) do |f| %>
就这样。现在,您将拥有一个 /admin 仪表板,其中包含指向 /admin/posts 和可用 CRUD 操作的链接。
向http://icebergist.com/posts/restful-admin-namespaced-controller-using-scaffolding大声疾呼。他从 2008 年开始的解决方案仍然非常重要,但是,与这个答案所解决的 Rails 3.2 显然存在一些差异;包括嵌套资源。