如何在Rails中建立后台管理页面

如何在Rails中建立后台管理页面,第1张

建立Controller

相信看这篇文章的朋友,应该都知道,Controller相关的文件都放在了 %Rails_Root%/app/controllers/ 目录下,为了和普通的Controller区分,我们在 %Rails_Root%/app/controllers/ 下新建一个目录 admin ,用于专门存放后台管理页面相关的Controller。

建立基本的Controller

也行大家都看过普通的Controller类的实现,都需要继承 ApplicationController ,把Controller的基本功能都继承下来。为了让后台管理页面使用不同的布局文件,其实我们只需要在Controller类定义中,调用一下 layout 方法即可。Rails中一个重要原则就是DRY。所以,为了减少代码重复,不在每一个后台管理相关的Controller中重复调用layout方法,我们建立一个后台的基础类。代码如下:

# %Rails_Root%/app/controllers/admin/base_controller.rb

class Admin::BaseController <ApplicationController

layout 'admin/application'

end

这里需要特别说明一下的是,为了防止和其他普通的Controller重名,也为了便于识别和管理,我们将后台管理相关的Controller都放到了 Admin 命名空间里。

建立登录Controller

建立完基础的Controller后,我们再来建立一个和登录相关的Controller。代码如下:

# %Rails_Root%/app/controllers/admin/sessions_controller.rb

class Admin::SessionsController <Admin::BaseController

# 登录

def new

end

end

配置Routes

添加完上面的Controller后,启动服务器,打开 http://localhost:3000/admin/signin ,页面会报错,提示 No route matches [GET] "/admin/signin" 。很明显是没有配置routes(窃译为“路由规则”)。所以,我们需要配置一下路由规则。

# %Rails_Root%/config/routes.rb

SampleApp::Application.routes.draw do

namespace :admin do

resources :sessions, only: [:new]

match '/signin', to: 'sessions#new', via: 'get'

end

end

我的工程命是 SampleApp ,你的工程名字也行和我的不一样。所以,代码也有稍有差异。

添加模板

建立完路由规则,再刷新页面,页面报错,错误如下:

Missing template layouts/admin/application with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}.

这是提示我们确实模板文件。另外,有木有感觉 admin/application 有点眼熟?我们在 Admin::BaseController 类中调用layout事,传递的参数就是这个。

建立布局文件

根据上面的分析,我们需要在 %Rails_Root%/app/views/layouts/admin/ 目录下,新建一个名为 application.html.erb 的文件。代码如下:

<!-- %Rails_Root%/app/views/layouts/admin/application.html.erb -->

<h1>This is Admin pages.</h1>

<hr />

<%= yield %>

这里将布局文件命名为 application.html.erb ,是为了和Rails生成的默认布局文件保持一致。从这里也能看出来,在Controller中调用layout方法,其实就是指名了寻找布局文件的路径,并且默认的根目录是 %Rails_Root%/app/views/layouts/ 。

建立视图模板文件

创建完布局文件,我们再次刷新浏览器。还是报错,提示错误信息如下:

Missing template admin/sessions/new, admin/base/new, application/new with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}.

根据我们对Rails的MVC的了解,可以一样看出来,我们需要创建 new.html.erb 。代码如下:

<!-- %Rails_Root%/app/views/admin/sessions/new.html.erb -->

This is login page.Please login.

至此,所有的工作做完,再刷新一下页面( http://localhost:3000/admin/signin ),是不是看到了我们想象的后台管理页面?

终极解决方案

解决后台管理页面创建的终极解决方案是: active_admin 。据网友评论说,有了 ActiveAdmin,创建 Rails 应用的管理界面就像儿戏。你会有一个很好的仪表盘,图形化 CRUD 界面以及更多东西。非常灵活且可客制化。

刚刚开始整的时候,出了点问题。所以,D瓜哥就在 Ruby China 上发帖 “active_admin 兼容 Rails 4 吗?” 询问了一下。感谢网友的回答,让我顺利过关。

由于Rails 4刚刚推出,不知道active_admin的有没有发布可以兼容Rails 4的官方包。所以,在 Gemfile 文件中声明gem包的时候,必须指定一下它的来源和分支。另外,还有声明一些依赖的gem。具体声明如下:

# %Rails_Root%/Gemfile

gem 'activeadmin', github: 'gregbell/active_admin', branch: 'rails4'

gem 'ransack', github: 'ernie/ransack', branch: 'rails-4'

gem 'inherited_resources', github: 'josevalim/inherited_resources'

gem 'formtastic', github: 'justinfrench/formtastic'

# 请注意:active_admin的rails 4分支,要求使用3.0版本以上的jquery-rails gem。

# 所以,要检查一下jquery-rails的版本。

gem 'jquery-rails', '3.0.4'

然后,使用如下命令更新、安装一下gem包:

bundle update

bundle install

相信一些朋友和我一样,对这两个命令都很好奇,也很纳闷,有啥区别呢?D瓜哥在网上找了两篇文章,希望能给这些朋友“传道授业解惑”:

bundle update 和 bundle install平时大家用哪个?

Why you should run bundle update

升级完gem包后,允许如下命令,生成后台页面:

rails generate active_admin:install

这个命令会创建一个初始化的管理页面,并且创建 %Rails_Root%/app/admin 目录,用于存放管理相关的配置信息。

下一步,进行数据库迁移。执行如下命令:

rake db:migrate

完成数据库迁移之后,执行如下命令,启动服务器:

rails server

这时,就可以访问 http://localhost:3000/admin ,跳转到登录页面,登录进入后台管理页面。默认登录名和密码如下:

User : admin@example.com

Password : password

现在,虽然有了后台管理页面,但是我们需要管理的各种东西都没有。所以,这个必须得加进来。执行命令如下:

rails generate active_admin:resource [MyModelName]

这条命令会在 %Rails_Root%/app/admin 目录下生成 my_model_names.rb ,用于配置资源信息。这时,刷新一下浏览器,顶部菜单栏是不是多了个选项?

这样搞,实在是太爽太方便了!Rails真实太TM好玩了:怎一个爽字了得啊?!

自我吐槽

有两个地方需要特别声明一下:

代码段的第一行为文件路由;

有些地方需要建立一些文件夹,请各位看文章时候注意。

特别感谢

这篇文章,部分内容参考了active_admin的官方文档。特别感谢!

ReactNative结合了Web应用和Native应用的优势,可以使用JavaScript来开发iOS和Android原生应用。在JavaScript中用React抽象 *** 作系统原生的UI组件,代替DOM元素来渲染等。ReactNative使你能够使用基于JavaScript和React一致的开发体验在本地平台上构建世界一流的应用程序体验。ReactNative把重点放在所有开发人员关心的平台的开发效率上——开发者只需学习一种语言就能轻易为任何平台高效地编写代码。Facebook在多个应用程序产品中使用了ReactNative,并将继续为ReactNative投资。其好处显而易见:减少了人力、节省了时间、避免了iOS与Android版本发布的时间差,开发新功能可以更迅速。下面,我们可以尝试用ReactNative创建一个iOSAPP.在我们开始之前,我建议:你可以在Github里先下载ReactNative的代码框架。里面还有一些示例项目,2048的游戏,Movies(一个看电影的APP),SampleApp,TicTacToe(一款游戏)和UIExplorer(能显示出所有用ReactNative替代的控件,如ListView,TabBar,MapView,Slider)),对于学习用如何用ReactNative创建UI,这些都是非常好的例子,尤其是UIExplorerAPP,它几乎用到了每一个您的APP中需要创建的UI控件。首先,我们先来安装相应的工具。Reactnative是使用Node.js来创建JavaScript代码。如果你已经在你电脑上安装上了这些工具,你可以跳过下面这几步。推荐使用Homebrew的方式来安装nvm,watchman和flow。在Mac下,如果用homebrew,那么只用一行就可以装好:brewinstallnode接下来安装watchmanbrewinstallwatchmanwatchman是Facebook的一个文件观察者。ReactNative用它来检测代码的变化.接下来安装npmnpminstall-greact-native-clinmp是node的一个三方管理工具,相当于Ruby中的RubyGems,iOS中的CocoaPods,Java中的Gradle/Maven,基本上,它使您能够轻松下载和管理你的项目需要的任何依赖库。在终端,找到你希望保存的项目文件,然后运行下面的文件夹。react-nativeinitBookSearch以上使用CLI工具来构建一个Native项目,是准备建立并运行原样。当这个过程完成后,你就会在终端窗口中打开Xcode的BookSearch.xcodeproj并运行应用程序像往常一样。做到这一点,模拟器将启动您的应用程序的运行。一个终端窗口也将打开。当一个Native应用程序启动时,它加载从以下网址JavaScript的应用程序。

SAMPLEAPP:这个实验按键控制工作组内模块LED 灯闪烁的实验,只有模块在工作组内,它以下的节点才能控制LED。

实验说明:首先启动一个网络协调器,协调器如果建立网络成功后,会在LCD 上显示

该节点为协调者同时显示网络ID 号。然后打开一个终端节点的电源,此时节点会自动加入

网络。加入网络成功后,节点会显示自己的网络地址和父节点的网络地址。模块加入网络后会自动加入工作组。节点跟主机、路由器加入同一工作组后,节点就可以控制主机和路由器的LED4 闪烁了,只需把节点的摇杆往上拔,就可以控制路由器和主机的LED 闪烁。同样,路由器的摇杆往上拔,也可以控制主机的LED4 闪烁。主机和路由器也可以随时退出工作组或加入工作组,

当主机或路由器在工作组内时,把摇杆往右拔一下,就可以退出工作组,反之则加入工作组。

主机或路由器一旦退出工作组,终端节点就无法控制主机或路由器了。

通往无线的桥梁

无线世界的先锋

3.2 Zigbee2007 协议栈实验例程表演说明

C:\Texas Instruments\ZStack-2.0.0-1.2.0\Projects\zstack\Samples\SampleApp\CC2520DB

这个实验按键控制工作组内模块LED 灯闪烁的实验,只有模块在工作组内,它以下的

实验说明:首先启动一个网络协调器,协调器如果建立网络成功后,会在LCD 上显示

该节点为协调者同时显示网络ID 号。然后打开一个终端节点的电源,此时节点会自动加入

网络。加入网络成功后,节点会显示自己的网络地址和父节点的网络地址。模块加入网络后

节点跟主机、路由器加入同一工作组后,节点就可以控制主机和路由器的LED4 闪烁了,

只需把节点的摇杆往上拔,就可以控制路由器和主机的LED 闪烁。同样,路由器的摇杆往

上拔,也可以控制主机的LED4 闪烁。主机和路由器也可以随时退出工作组或加入工作组,

当主机或路由器在工作组内时,把摇杆往右拔一下,就可以退出工作组,反之则加入工作组。

主机或路由器一旦退出工作组,终端节点就无法控制主机或路由器了。

GenericApp

这个实验是两个模块相互绑定后可以对传数据,模块绑定之后,两个模块之间相互传输

字符串"Hello World"。

实验说明:首先启动一个网络协调器,协调器如果建立网络成功后,会在LCD 上显示

该节点为协调者同时显示网络ID 号。然后打开一个终端节点或路由器的电源,此时节点会

自动加入网络。加入网络成功后,节点会显示自己的节点类型、网络地址和父节点的网络地

址。

节点加入网络成功后,首先把主机模块的摇杆往右拔一下,然后把要绑定模块的摇杆也

往右拔一下,如果两边的LED4 都熄灭或是点亮后马上熄灭,表示绑定成功。绑定成功后,

两个节点就开始相互定时发送数据,并在对方的LCD 屏上显示出来,发送的数据为"Hello

World"。此时如果把相互绑定模块中的一个摇杆往左拔一下,可以发送Match Description

Request 命令,对方则显示Match Description Request 信息。

通往无线的桥梁

无线世界的先锋

38400,无奇偶校验,1 位停止位。此时其中一个模块从串口发送数据,就可以从另一个模

实验工程路径为: C:\Texas Instruments\ZStack-2.0.0-1.2.0\Projects\zstack\Utilities\

这个实验是一个无线传输数据速度测试实验,主要是完成模块间的绑定和测试两个模块

之间相互传输数据的速成度实验。实验首先要完成绑定功能,才能进行数据传输的速度测试。

实验说明:首先启动一个网络协调器,协调器如果建立网络成功后,会在LCD 上显示

该节点为协调者同时显示网络ID 号。然后打开一个终端节点的电源,此时节点会自动加入

网络。加入网络成功后,节点会显示自己的网络地址和父节点的网络地址。加入成功后,就

可以开始绑定了。首先把主机模块的摇杆往右拔一下,然后把绑定模块摇杆也往右拔一下,

如果两边的LED4 都熄灭或是点亮后马上熄灭,表示绑定成功,此时就可以进行无线数据传

绑定成功后,此时把摇杆下拔,可以清除收发数据的计数值,并显示接收和发送时的速

度和完成收发的字节数。LCD 第一排显示此模块接收数据的速度和总字节数,第二排显示

此模块发送数据的速度与总字节数。如果模块想要发送数据,只需把摇杆向上拔一下,模块

就开始发送数据,LCD 上第二排则显示此时的速度与发送数据的总字节数。被绑定的另一

端则显示接收数据的速度与接收到数据的部字节数。如果想要停止发送数据,只需把摇杆向

SimpleApp

1、开关实验

在工程序里选择SimpleController 或SimpleController-Pro 做主机或路由程序,选择

SimpleSwitch 或SimpleSwitch-Pro 做节点程序时,可以做开关控制实验。

首先把SimpleController 或SimpleController-Pro 程序下载到模块里,然后把模块复位,

模块复位后LED2 不停闪烁。此时把摇杆往上拔,则此模块的属性就被定义为网络协调器,

然后系统会自动重新启动,模块会以网络协调器的身份建立一个网络,并会在LCD 上显示

该节点为协调者同时显示网络ID 号。如果把摇杆往右拔,则模块的属性被定义为路由器,

然后模块自动重启,如果此时有网络存在,节点会以路由器的身份加入网络,节点会在LCD

上显示自己为路由器以及它的网络地址和父节点的网络地址。此后,不管是复位还是断电重

启节点的类型都不会再改变了。只有重新烧写一次程序才能改变节点的类型。然后把SimpleSwitch 或SimpleSwitch-Pro 程序下载到模块里。然后把模块复位,模块复

位后LED2 不停闪烁。此时把摇杆往上拔或是向右拔,模块会以终端节点的身份自动重启,

如果此时有网络存在,模块会自动加入网络并显示自己的节点类型、网络地址和父节点的网

络地址。当下一次复位或是断电重启,模块都会直接以终端模块的类型加入网络。

当模块加入网络成功后,此时把协调器模块的摇杆往上拔一下,模块则允许其它模块绑

定。此时再把终端模块的摇杆往上拔一下,协调器模块LCD 上显示”Match Desc Req ”和”Rsp

Sent”,表示终端模块已经跟协调器模块绑定成功,此时把终端模块的摇杆往右拔可以控制

协调器模块的LED1 灯的亮和灭。终端节点绑定成功后,也可以把摇杆往下拔来解除绑定。

2、传感器实验

在工程序里选择SimpleCollector 或SimpleCollector-Pro 做主机或路由程序,选择

SimpleSensor 或SimpleSensor-Pro 做节点程序时,可以做无线传感器实验。

首先把SimpleCollector 或SimpleCollector-Pro 程序下载到模块里,然后把模块复位,模

块复位后LED2 不停闪烁。此时把摇杆往上拔,则此模块的属性就被定义为网络协调器,然

后系统会自动重新启动,模块会以网络协调器的身份建立一个网络,并会在LCD 上显示该

节点为协调者同时显示网络ID 号。如果把摇杆往右拔,则模块的属性被定义为路由器,然

后模块自动重启,如果此时有网络存在,节点会以路由器的身份加入网络,节点会在LCD

上显示自己为路由器以及它的网络地址和父节点的网络地址。此后,不管是复位还是断电重

启节点的类型都不会再改变了。只有重新烧写一次程序才能改变节点的类型。

然后把SimpleSensor 或SimpleSensor-Pro 程序下载到模块里。然后把模块复位,模块复

位后LED2 不停闪烁。此时把摇杆往上拔或是向右拔,模块会以终端节点的身份自动重启,

如果此时有网络存在,模块会自动加入网络并显示自己的节点类型、网络地址和父节点的网

络地址。当下一次复位或是断电重启,模块都会直接以终端模块的类型加入网络。

当模块加入网络成功后,此时把协调器模块的摇杆往上拔一下,模块则允许其它模块绑定,

此时需要等待一段时间,大约5 秒后协调者LCD 上显示”Match Desc Req ”和”Rsp Sent”。此

后终端模块会自动绑定到协调器上,终端模块和协调器模块绑定成功后,终端模块会定时向

网络协调器发送自己的温度值和电池电压值。网络协调器此时需要用串口线把底板接到电脑

上,然后打开串口调试助手,把波特率设到38400,8 位数据位,1 位停止位,无奇偶校验

位。就可以定时在串口调试助手上显示其它终端节点的温度值和电池电压值。

应该就是这样的了,很明白


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7901348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存