我是新的rails,我試圖找到一個驗證方法,在更新記錄時驗證屬性的存在。如果該屬性不存在,意味着請求主體中不存在該屬性,那麼Rails不應該更新該記錄。如何在更新記錄時驗證屬性的存在?
validates :description, presence: true
和
validates_presence_of :description
似乎並沒有做的工作。有沒有爲此目的的方法?這似乎在每天的情景中都很常見。
我是新的rails,我試圖找到一個驗證方法,在更新記錄時驗證屬性的存在。如果該屬性不存在,意味着請求主體中不存在該屬性,那麼Rails不應該更新該記錄。如何在更新記錄時驗證屬性的存在?
validates :description, presence: true
和
validates_presence_of :description
似乎並沒有做的工作。有沒有爲此目的的方法?這似乎在每天的情景中都很常見。
如果你說:
model.update(hash_that_has_no_description_key)
那麼你就不觸摸:description
:發送散列沒有:description
鍵到update
是不一樣的發送與:description => nil
散列。如果model
已經有效(即它有說明),那麼update
不會使其無效,因爲它不會觸及:description
。
你這樣說:
如果屬性不存在,意味着該屬性不請求主體存在,Rails的不應該更新記錄。
既然你談論請求主體(該款車型真的不應該知道的東西),那麼你應該用這種邏輯在控制器中處理,因爲它準備爲update
呼叫傳入的數據。
你可以檢查在控制器和抱怨:
data = whatever_params
if(!data.has_key?(:description))
# Complain in an appropriate manner...
end
# Continue as now...
,或者你可以包括:description => nil
如果沒有:description
:
def whatever_params
data = params.require(...).permit(...)
data[:description] = data[:description].presence # Or however you prefer to do this...
data
end
也許你應該使用before_update ..
看到這一點:http://edgeguides.rubyonrails.org/active_record_callbacks.html#conditional-callbacks
但before_update改用before_save ..
這應該工作。你能粘貼更多的代碼嗎? – Rahul