2014-09-23 60 views
5

我目前使用:使用貨幣導軌:如何手動設置屬性的貨幣

  • 錢護欄v0.12.0
  • v4.1.6
  • 紅寶石v2.1.3

使用情況

我'更新我用money-rails移民助手(即add_money)創建的稱爲dollars_per_month的貨幣類型屬性。

所以,在我的模型,我有:

monetize :dollars_per_month_cents, allow_nil: true 

而且我目前的模式有:

t.integer "dollars_per_month_cents" 
t.string "dollars_per_month_currency", default: "CAD", null: false 

貨幣的全局設置在配置/初始化:

config.default_currency = :cad 

問題

我希望用戶能夠在文本字段中輸入「500美元」或「500」或「500 CAD」並正確保存。目前,指定一個非全球貨幣時,它拋出異常:

RuntimeError: Can't change readonly currency 'CAD' to 'USD' for field 'dollars_per_month' 

這也在情理之中,我可以理解爲什麼這是自然強制執行。

但是,我想強制改變貨幣沒有關心這樣的強制執行,因爲這個領域僅僅是爲了捕捉問題的答案。

簡單的解決方案(儘管未來缺乏便利)是將其轉化爲純文本。然而,我想知道是否可以用RubyMoney和/或Money-rails來做到這一點,而不必觸摸應用程序的其餘部分。

注意

  • 我試圖改變dollars_per_month_currency和保存模型,但是,dollars_per_month仍然會返回一個基於CAD貨幣對象。

  • 我查看了金錢欄中的Instance貨幣readme。雖然我相信我可以做到這一點,但我覺得這是過度的,因爲它需要額外的貨幣領域..當我只想改變dollars_per_month_currency

欣賞任何人都必須分享的見解或經驗!

回答

2

使用選項with_model_currency

monetize :dollars_per_month_cents, allow_nil: true, with_model_currency: :dollar_per_month_currency