今天细看了quakewang的那篇文章,获益匪浅,写得真是太好了.
http://www.iteye.com/topic/448235
其实这篇文章已经写得非常的详细了,没有什么可写的。
但是为了缅怀一下,决定还是写一下,由于本人对ROR的学习时间并不长,只一个月左右,不管对ruby还是rails的理解都很有限,下面再介绍一下其过程。
在java中经常遇见数据库存储属性对应的值,而页面显示相应的名称。如['男', 0], ['女', 1]。数据库存储0或1,而页面显示男或女。处理的时候也有两种处理方式,一种是建立一个常量的类,通过Map来实现存取的常量。第二种是使用hibernate的特性,有个属性专门用来代替数据库某值存取,如把0替换成男,至于那个属性叫什么现在记不清了。
今天看了一下牛人在ror上实现方式,非常的不错,所以决定把详细过程再写一下。
一、首先解决数据库字段,建立一个迁移:
二、实现一个插件,虽然没有在书上看见过这方面的介绍,但其实很简单。
上面这张图是插件的目录结构。
首先看一下enum_attr.rb:
module EnumAttr
module Mixin
def enum_attr(attr, enums)
#将attr转换成字符串对象,不然下面就不能使用upcase方法
attr = attr.to_s
self.class_eval(%Q{
ENUMS_#{attr.upcase} = enums
validates_inclusion_of attr, :in => enums.map{|e| e[1]}, :allow_nil => true
def #{attr}_name
#ENUMS_#{attr.upcase}是一个数组,数据来自model类常量,而#{attr}是model类属性的值,这两个attr是不一样的,这个方法主要用在显示记录的地方。也就是说,数据库已经存在这条记录,只是根据这个值找到相应的键。如在[['男', 0], ['女', 1]]中,数据库存储的是0或1,如果属性值是0,将返回'男'。
ENUMS_#{attr.upcase}.find{|option| option[1] == #{attr}}[0] unless #{attr}.nil?
end
})
end
end
end
这段代码写得非常的精髓,要理解每一个细节还是得花点时间的,主要作用是在model类中建立ENUMS_#{attr.upcase}方法(用于遍历)、验证字段、#{attr}_name方法(用于显示)。
在init.rb中进行初始化加载:
require 'enum_attr'
Object.send(:include, EnumAttr::Mixin)
然后就可以在model为中调用了, 如在user类中:
...
enum_attr(:gender, [['男', 0], ['女', 1]])
...
而编辑或创建页面都是一样的写法:
<%= f.label :gender,'Gender' %>:
<%= f.select :gender, User::ENUMS_GENDER %>
这个地方在编辑页面的时候也有效果,真是神奇。
显示的页面可以这样:
<%=h @user.gender_name %>
这个过程的解决方式非常的优雅,的确很强大。不过有些细节还是需要注意的,如,Object的send方法,作用是把EnumAttr::Mixin传给include方法,而include则是Object的一个内部方法,至于为什么要在前面加个冒号,细究起来还真是复杂,这里有两篇文章讲得很好:
http://www.cnitblog.com/gyn/archive/2007/09/18/15206.html
http://www.iteye.com/topic/109697
- 大小: 13.7 KB
- 大小: 7.2 KB
分享到:
相关推荐
在提供的压缩包文件中,我们可以看到"Ruby语言中文教程",这暗示了资源可能包含了关于Ruby语言的基础知识和进阶内容,对于学习RoR至关重要。Ruby是RoR的基础,理解其语法和特性对于掌握RoR框架极其关键。 **Ruby...
在处理中文内容时,RoR可能遇到编码问题,比如UTF-8与GBK的转换,或者在显示和存储中文字符时出现问题。这个解决方案可能包含了特定的配置、插件或者代码调整,以确保RoR应用能正确地处理和显示中文。 描述中提到的...
例如,Reiserfs文件系统在处理大量小文件时表现出色,这对于Rails的session文件存储尤其有利。为了进一步提高session处理性能,可以将临时目录链接到内存文件系统/dev/shm,实现内存中的操作。Rails 2.0引入了将...
在Ruby on Rails(ROR)开发环境中,安装和配置正确的依赖包是至关重要的。这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails...
为了正确地处理二进制文件,必须在表单中设置`enctype="multipart/form-data"`属性,这是通过在Rails的`start_form_tag`辅助方法中设置`multipart => true`选项来实现的。 ```erb ({:action=>'create'}, {"name"=>...
在CIFAR-10上达到89%的准确率,以及在CIFAR-100上达到72%的准确率,展示了ResNet和Ror模型在处理复杂图像分类任务上的强大能力。相比于其他传统的浅层网络或早期的深度网络,这样的准确率显著提高了模型的性能,表明...
NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696
"ror实例"可能指的是在学习或实践中,通过创建一个具体的Rails应用程序来理解和掌握RoR的工作原理和最佳实践。 在Ruby on Rails中,重要知识点包括: 1. **Gemfile与Gemfile.lock**:项目中的Gemfile用于指定项目...
在这个选题方向中,我们主要探讨的是与RoR相关的源代码分析和学习。源代码是理解任何编程语言或框架工作原理的关键,对于RoR来说也不例外。 在深入源代码之前,我们需要了解RoR的一些核心概念。如ActiveRecord,它...
1. MVC架构:Rails将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分,分别负责数据处理、用户界面展示和业务逻辑控制。 2. 数据库集成:Rails通过ActiveRecord组件与数据库进行交互,提供...
基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。
标题 "從 PL/SQL 中調用 ROR 创建的 Web 服务" 暗示了我们需要讨论如何在 Oracle 的 PL/SQL 环境中利用 Ruby on Rails (ROR) 构建的 Web 服务。ROR 是一个流行的开源 Web 应用框架,它基于 Ruby 语言,而 PL/SQL 则...
书中详细介绍了方法定义、参数处理、默认参数值、rest参数(*args)以及块的使用。 6. **块、Proc和Lambdas**:Ruby的块是代码的匿名封装,Proc和Lambda是块的两种可存储形式。书中深入讨论了这三者的区别和用法。 ...
《机遇ROR的图书管理系统》是一份以Ruby on Rails(简称ROR)技术为核心,旨在构建高效、便捷的图书管理解决方案的学习资料。Ruby on Rails,是基于Ruby编程语言的开源Web应用框架,它遵循MVC(Model-View-...
### Windows上搭建Ruby on Rails(ROR)环境详解 #### 一、引言 随着Web开发技术的不断发展,Ruby on Rails(简称Rails或ROR)作为一种高效、简洁且优雅的Web开发框架,受到了广大开发者的青睐。然而,在Windows...
在IT行业中,Ruby on Rails(简称ROR)是一款基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用开发过程,提高开发效率。本文将深入探讨如何配置ROR开发环境,以及...