rails将类常量重构到数据库对应的表中之三

    经过博文之一和之二的重构,貌似代码表现的还不错,正常运行和test都通过鸟,但是,感觉告诉我们还是有什么地方不对劲啊!究竟是哪里不对劲呢?我们再来好好看一下.

    我们把数据库表中的支付方式集合直接放在实现的地方,貌似很唐突.无论是Order model中,Order控制器中还是new.html.erb中都是如此:

#in Order.rb

  validates :pay_type,inclusion:PaymentType.all.map {|type|type.pay_type}
  validates :pay_type,inclusion:OrdersController.payment_types

#in OrdersController.rb

 @@payment_types = PaymentType.all.map {|type|type.pay_type}

  def self.payment_types
    @@payment_types
    #PaymentType.all.map {|type|type.pay_type}
  end

  def self.payment_types=(types)
    @@payment_types = types
  end

(是滴!为了test我又蠢蠢的加了self.payment_types=方法! :( )

人家本来是类PaymentType的东东好吧!?那么应该让其回归本源啊,于是乎有了第一步:在PaymentType中添加方法:

class PaymentType < ActiveRecord::Base
  def self.types
    all.map {|type|type.pay_type}
  end
end

然后第二步:修改Order的检查方法:

validates :pay_type,inclusion:PaymentType.types

接着第三步:修改new.html.erb的select元素的构成:

<%= f.select :pay_type,PaymentType.types,prompt:'Select a payment method' %>

多余的东东都可以删除鸟,再测试下,一切OK哦!到这里重构正式告一段落喽(还来啊!) :)

时间: 2025-01-02 20:47:31

rails将类常量重构到数据库对应的表中之三的相关文章

rails将类常量重构到数据库对应的表之后记

    怎么还有啊!别急,有强迫症的人伤不起!有点小事没说完感觉痒痒的:就是如果表payment_types经常变动该怎么办?每次都要关闭rails网页服务器,然后重启吗?那也太麻烦鸟,最终的解决方案是,在Order的验证中强制每次都从数据库的表中拉取支付类型数据比较,最后修改完的Order.rb代码如下: class Order < ActiveRecord::Base has_many :line_items,dependent: :destroy validates_each :pay_t

winform-【Winform】如何从数据库多个表中读数据生成树结构?

问题描述 [Winform]如何从数据库多个表中读数据生成树结构? 现在只会单表,但这个要求大概有四五个表需要从表一中读取父节点然后再表二表三一个个读没找到实例,请问各位多表改怎么做? 解决方案 可以用joingoogle sql inner joingoogle sql left join 解决方案二: 能讲一下表的结构都是怎样的吗? 树形结构,一般父节点和子节点都是相似的(IdparentId), 所以应该都是存储在同一个表中.如果表结构相同但在不同表,可以使用union合并. 生成树,首先

用C#在datagridview中显示access数据库一张表中的内容,但是列的显示乱了

问题描述 用C#在datagridview中显示access数据库一张表中的内容,但是列的显示乱了 ACCESS数据库表中列的顺序是1左,2左,11左,12左,1右,2右,11右,12右,但是当显示在datagridview中时就呈现上面的乱码, 解决方案 这是一个bug 试试看:http://blog.csdn.net/lukesunch/article/details/4644101 再不行就不要绑定,手工循环添加.

c#winform项目将一个收银台的销售记录添加到数据库的一个表中

问题描述 c#winform项目将一个收银台的销售记录添加到数据库的一个表中 我是一名大学生,在学习计算机.在做nike项目,遇到一个问题,怎么把收银台的销售记录加入到数据库的另一个表中 .求个位大神指条明路! 解决方案 是不知道如何写向数据库插入记录的语句吗?可以问度娘啊. 如果不是请详细说一下你的问题 解决方案二: 这是一个项目,很难全部解答. 可以细分再询问 C#操作SQL Server数据库:http://www.cnblogs.com/rainman/archive/2012/03/1

select-jdbc 从数据库一张表中查询得到一个值,插入到另一张表中,插入不进去

问题描述 jdbc 从数据库一张表中查询得到一个值,插入到另一张表中,插入不进去 jdbc 从数据库一张表中查询得到一个值,插入到另一张表中,插入不进去,代码如下: public void addObjectFields(Company c)throws SQLException{ Connection conn=DBUtil.getConnection(); Statement stmt = conn.createStatement(); String insertSql = " insert

ajax-怎么判断当前取出的数据是数据库相应的表中的最后一条

问题描述 怎么判断当前取出的数据是数据库相应的表中的最后一条 是这样的,我有一个jsp界面, setInterval(function (){ $.post(url,data,function() { do something }); },2000); 这段代码主要是每隔两秒就像Struts2的action发出一次请求,从而获取数据库中的数据. 第一次获取数据库第一条记录的数据,第二次第二条,以此类推.假设我现在数据库有N条数据,我希望定时器获取了N次信息之后把定时器清除,要怎么做?数据库操作采

修改MySQL数据库中表和表中字段的编码方式的方法_Mysql

今天向MySQL数据库中的一张表添加含有中文的数据,可是老是出异常,检查程序并没有发现错误,无奈呀,后来重新检查这张表发现表的编码方式为latin1并且原想可以插入中文的字段的编码方式也是latin1,然后再次仔细观察控制台输出的异常,进一步确定是表和表中字段编码不当造成的,那就修改表和其中对应的字段呗,网上找了一会儿,你别说还真有,执行完sql脚本后果然可以存入中文了,尽管如此还是认为有必要总结一下,古人云:好记性不如烂笔头嘛,呵呵呵. 修改表的编码方式:ALTER TABLE `test`

Mysql 导出数据库和指定表中的数据

参考地址:http://jingyan.baidu.com/article/b7001fe14240ab0e7282dde9.html [root@youo zw]# mysqldump -u root -p IpManage_v2 > zw_ipmanagev2.sql; 唉哟,不错哦!   MySQL导出指定表中的数据 要求: 1. 不导出创表的语句,因为表已经建好:默认会导出,先drop table然后create table: 2. 导出的insert语句加上ignore,允许重复执行:

Access3.4 选择数据库中表和表中的字段

  现在屏幕上又出现了信息提示对话框上面有数据库需要存储的客户信息订单信息等很多内容 看过这些提示信息后单击下一步按钮进入向导的下一步工作对话框中提了一个问题请确定是否添加可选字段?这个对话框分类列出了数据库中可能包含的信息左边框中是信息的类别右边框中列的是当前选中的类别中的信息项 这些信息项的前面都有一个小方框有的小方框中有一个√表示此信息项被选中了被选中的信息项将会出现在数据库中而没有选中的信息项就不会出现在数据库中我们可以通过单击信息项前的小方框来决定数据库中是否要包含某些信息项如果信息项