且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-06-28 19:41:06

    经过博文之一和之二的重构,貌似代码表现的还不错,正常运行和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哦!到这里重构正式告一段落喽(还来啊!) :)