關於humanize
(也可能titleize
我也不確定)的問題是它打破瞭如果字符串是nil
視圖。 ,然後您必須改爲.try(:humanize)
,如果您意識到自己犯了錯誤的方式太晚,並且必須在視圖中重新檢查每行代碼,這會非常令人頭疼。 我正在尋找的是一種方式,我可以humanize
和titleize
字符串存儲到數據庫之前。這樣,即使我直視我的數據庫,我會看到字符串humanize
d和titleize
d。有沒有一種方法來標記和人性化字符串之前存儲到數據庫中
0
A
回答
2
你可以在您的模型中創建一個方法,該方法將採用此屬性並根據需要和/或您需要進行轉換。每當使用該方法存儲記錄時,您都可以「觸發」該方法before_save
回調:
例如,有一個型號User
哪些屬性name
和lastname
我使用name
並在其上使用titleize
:
class User < ApplicationRecord
before_save :titlelize_names
def titlelize_names
self.name = self.name.titleize
end
end
】這個params要包含的屬性爲用戶鍵入他們,但他們將被保存根據模型說的話:
Processing by UsersController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"...", "user"=>{"name"=>"name", "lastname"=>"lastname"}, "commit"=>"Create User"}
(0.1ms) begin transaction
SQL (0.8ms) INSERT INTO "users" ("name", "lastname", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["name", "Name"], ["lastname", "lastname"]...]
是你需要做之前保存記錄的唯一一個互動,觀點不變和控制器只是接收它,使什麼型號的說。
如果在保存記錄時發生了一些問題,您可以使用throw(:abort)
和「強制停止」回調鏈。
def titlelize_names
self.name = self.name.titleize
throw(:abort)
end
此外,並根據哪種方法你使用與before_save
回調,您可以添加,這將提供給你的控制器中使用,如例如自定義錯誤,在關鍵:titleize_names
識別的錯誤可能然後在控制器中處理。
def titlelize_names
errors.add(:titleize_names, 'An error has ocurred with the name attribute.')
self.name = self.name.titleize
throw(:abort)
end
0
在將數據保存到數據庫之前,可以使用模型回調來轉換數據:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html - 您可能想要before_save
。
此外,如果您想確保記錄永不爲零,請添加驗證。
例子:
class Example < ActiveRecord::Base
validates :name, presence: true
before_save :fixname
# Force titleize on :name attribute
def fixname
self.name = self.name.titleize
end
end
現在你的模型將有一個方法叫fixname
,你可以和任何地方調用你的模型實例具有它保存到數據庫之前調用。
0
如果humanize
如果值是零titlerize
返回例外,if語句創建一個,你可以在一個服務使這個過程或一個函數模型使用before_save
或before_create
回調:
value.titleize unless value.nil?
相關問題
- 1. 有沒有一種標準的方法來存儲密碼在數據庫中?
- 2. 有沒有人找到一種有效的方法來將BSON ObjectId值存儲在SQL數據庫中?
- 3. 有沒有一種簡單的方法來使collection_select中的字符串人性化?
- 4. 有沒有一種標準的方式來存儲python中的XY數據?
- 5. 有沒有一種方法來標記每protobuf網記錄
- 6. 有沒有一種方法來檢查一個字符串/ char是否存在於另一個字符串中?
- 7. Greenplum:有沒有一種方法來定義一個表,數據將被存儲在主數據庫中
- 8. 有沒有一種方法來處理Python中字符串中的兩個單詞之間的子字符串?
- 9. 有沒有一種標準的方法來檢測方向性?
- 10. 有沒有一種方法來評估string.contains()方法內的多個字符串?
- 11. 有沒有一種簡化的方式來取消在C#中的字符串?
- 12. 有沒有一種方法來初始化整數Java中
- 13. Rails 4沒有用這種方法保存到數據庫中?
- 14. 有沒有一種方便的方法在Freemarker中格式化人類可讀的字節大小字符串?
- 15. 有沒有一種方法可以將Java中的URL縮短方便地存儲到數據庫中
- 16. 有沒有一種方法來在JS中反序列化一個php序列化字符串?
- 17. 有沒有一種方法來提取XCode ios項目中的字符串i18n
- 18. java - 有沒有一種方法來確認一個字符串是sha256哈希?
- 19. 有沒有從數據庫中存儲枚舉的好方法?
- 20. 有沒有一種方法來簡化函數簽名playframework
- 21. 有沒有辦法用混合字符和「字符串」來初始化數組
- 22. DAO持久性:只有一種方法來存儲複雜的數據對象?
- 23. 無法將數據URI存儲到數據庫而沒有剝離+字符
- 24. 在IDA Pro中,是否有一種方法來標記函數?
- 25. 有沒有一種方法來定位前一個元素?
- 26. 有沒有一種標準化的方式來向rss添加位置數據?
- 27. 有沒有一種方法可以在數據庫中只保存SmallDateTime
- 28. 有沒有一種方法來實現計算屬性的子字符串getter和setter?
- 29. 有沒有一種方法來讀取使用數據流
- 30. Smalltalk - 有沒有一種方法來確定數據類型?
控制器可能不是在將模型實例保存到數據庫之前操作模型實例的最佳位置。 – ddubs
那,你說得對。我不知道我爲什麼這麼說。正在編輯... –