rails將類常量重構到資料庫對應的表中之三

2021-09-23 21:12:58 字數 1093 閱讀 6326

經過博文之一和之二的重構,貌似**表現的還不錯,正常執行和test都通過鳥,但是,感覺告訴我們還是有什麼地方不對勁啊!究竟是**不對勁呢?我們再來好好看一下.

我們把資料庫表中的支付方式集合直接放在實現的地方,貌似很唐突.無論是order model中,order控制器中還是new.html.erb中都是如此:

#in order.rb

validates :pay_type,inclusion:paymenttype.all.map

validates :pay_type,inclusion:orderscontroller.payment_types

#in orderscontroller.rb

@@payment_types = paymenttype.all.map

def self.payment_types

@@payment_types

#paymenttype.all.map

enddef self.payment_types=(types)

@@payment_types = types

end

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

人家本來是類paymenttype的東東好吧!?那麼應該讓其回歸本源啊,於是乎有了第一步:在paymenttype中新增方法:

class paymenttype < activerecord::base

def self.types

all.map

endend

然後第二步:修改order的檢查方法:

validates :pay_type,inclusion:paymenttype.types
接著第三步:修改new.html.erb的select元素的構成:

<%= f.select :pay_type,paymenttype.types,prompt:'select a payment method' %>
多餘的東東都可以刪除鳥,再測試下,一切ok哦!到這裡重構正式告一段落嘍(還來啊!) :)

rails將類常量重構到資料庫對應的表之後記

怎麼還有啊 別急,有強迫症的人傷不起 有點小事沒說完感覺癢癢的 就是如果表payment types經常變動該怎麼辦?每次都要關閉rails網頁伺服器,然後重啟嗎?那也太麻煩鳥,最終的解決方案是,在order的驗證中強制每次都從資料庫的表中拉取支付型別資料比較,最後修改完的order.rb 如下 c...

rails將類常量重構到資料庫對應的表之後記

怎麼還有啊 別急,有強迫症的人傷不起 有點小事沒說完感覺癢癢的 就是如果表payment types經常變動該怎麼辦?每次都要關閉rails網頁伺服器,然後重啟嗎?那也太麻煩鳥,最終的解決方案是,在order的驗證中強制每次都從資料庫的表中拉取支付型別資料比較,最後修改完的order.rb 如下 c...

將資料庫備份到AZURE blob storage

1建立乙個storage account 1 點選browse storage accounts 2 填寫storage account,請記住這個名字,之後建立credential需要用到。3 點選create。一般等待一段時間就好了 2 建立container 2 在blob service頁面...