文档章节

rails的设置与公告开发

moli
 moli
发布于 2016/05/09 01:41
字数 280
阅读 53
收藏 0

开发一个“设置”功能,所以基于设置功能,开发一个公告等。

"设置"存在数据库中,本质上是一个K/V表。

比如现在有这样一个settings表

列:key | content

内容: abc | hello world

先使用ruby的特性实现一个Setting表:

class Setting < ActiveRecord::Base

  def self.method_missing(method_name, *args)
    return super if self.respond_to? method_name

    method_name = method_name.to_s

    update = false
    if method_name.include? "="
      update = true
      method_name = method_name.split("=").first
    end

    key = "#{prefix}#{method_name}"

    set = Setting.find_by_key key

    if set
      if update
        set.update_attribute :content, args.first
      else
        return set.content
      end
    end

  end

  def self.prefix
    ""
  end

end

这样就实现了例如

Setting.abc

这样的语法。

直接读取数据库中的key字段为 abc的内容“helloworld”。

也可以这样

Setting.abc="thank you"

直接设置key列下字段为 abc的content为 “thank you”

是不是好方便呀。 ruby就是这么强大~~

现在基于Setting这个类,继承,实现一个公告类。

class Notice < Setting
  def self.prefix
    "NOTICE_"
  end
end

于是,我们写读取数据时,会自动在key字段前加一个 NOTICE_ ,用于区分不同的类型的设置。

例如

Notice.abc

生成的sql语句为

SELECT  `settings`.* FROM `settings` WHERE `settings`.`key` = 'NOTICE_abc' LIMIT 1

完毕。


© 著作权归作者所有

共有 人打赏支持
moli

moli

粉丝 112
博文 13
码字总数 2969
作品 1
深圳
程序员
私信 提问
Rails 5.0.7 与 5.1.6 发布,开源网络应用框架

Rails 5.0.7 和 5.1.6 发布。Ruby on Rails 是一个用于开发数据库驱动的网络应用程序的完整框架。Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和...

h4cd
03/31
521
2
Redmine 4.0.0 发布,项目管理 Web 应用

Redmine 4.0.0 发布了,Redmine 是一个使用 Ruby on Rails 框架编写的灵活的项目管理 Web 应用程序。 此次更新带来超过 200 个变化,包括: 电子邮件通知的重大更改:每个用户现在都会收到自...

h4cd
12/10
0
3
Rails 5 有什么新特性?

Rails 5 即将在 2015 年秋季发布,新版本拥有很多令人激动的特性。如果你使用 Rails 开发商城,那你必须使你的应用准备好迎接新的 Rails 新特性。 别担心!我们会在新版本到来之前让你了解新...

oschina
2015/06/14
6.5K
12
Fedora Linux 20 Alpha 发布

即将到来的在 Fedora 项目成立 10 周年前夕,Fedora 20 发布了 Alpha 版本。 Fedora 20 带来了大量新功能,其中在本次 Alpha 版本中可以见到的有: 将 ARM 作为主要支持架构,意味着绝大多数...

oschina
2013/09/25
6.8K
14
漏洞预警:GitLab 权限泄露漏洞

漏洞概述 GitLab 是一个使用 Ruby on Rails 开发的开源应用程序,实现了一个 Git 仓库管理平台,可通过 Web 界面进行访问公开的或者私有的项目。在企业中得到的广泛的使用。近日研究者发现在...

局长
2017/03/21
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

ZooKeeper命令大全

创建节点 # 创建节点,-s表示顺序节点,-e表示临时节点,默认是持久节点create [-s] [-e] path data acl # 示例create /zk-book 123 查看节点 ls path [watch] # 示例ls /zk-book 获取...

爱宝贝丶
12分钟前
0
0
QLExpress基本语法

QLExpress基本语法 一、背景介绍 由阿里的电商业务规则、表达式(布尔组合)、特殊数学公式计算(高精度)、语法分析、脚本二次定制等强需求而设计的一门动态脚本引擎解析工具。 在阿里集团有...

xiaomin0322
13分钟前
0
0
Elasticsearch节点角色类型node.master和node.data说明s

一般地,ElasticSearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。这些功能是由两个属性控制的(node.master和node.data)。默认情况下这两个属性的值都是tru...

傲娇字符
28分钟前
4
0
rem的使用

(function (doc, win) { var docEl = doc.documentElement var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize' var recalc = function () { var cl......

Js_Mei
35分钟前
1
0
idea 删除代码的注释

搜索栏使用 正则表达式搜索 (/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/|[ \t]*//.*) 会搜索出来所有注释的代码 用空格replace替换掉就可以了。 或者搜索 (/\*([^*]|[\r\n]|(\*+([^*/]|[\r\...

时刻在奔跑
38分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部