更新记录时如何验证属性的存在?

时间:2017-04-07 02:56:43

标签: ruby-on-rails validation

我是rails的新手,我尝试在更新记录时找到与验证属性是否存在相对应的验证方法。如果该属性不存在,意味着请求正文中不存在该属性,则Rails不应更新记录。

validates :description, presence: true

validates_presence_of :description

似乎没有完成这项工作。有没有为此目的的方法?这在每天的情景中似乎都很常见。

2 个答案:

答案 0 :(得分:2)

如果你说:

model.update(hash_that_has_no_description_key)

然后您没有触及:description:向:description发送没有update密钥的哈希与使用:description => nil发送哈希值不同。如果model已经有效(即它有说明),则update不会使其失效,因为它不会触及:description

你这样说:

  

如果该属性不存在,意味着请求正文中不存在该属性,则Rails不应更新记录。

既然你在讨论请求主体(哪些模型真的不知道什么),那么你应该在控制器中处理这个逻辑,因为它准备了{的传入数据{1}}致电。

您可以检查控制器并抱怨:

update

或者,如果没有data = whatever_params if(!data.has_key?(:description)) # Complain in an appropriate manner... end # Continue as now... ,则可以包含:description => nil

:description

答案 1 :(得分:1)

也许你应该使用before_update ..

请参阅:http://edgeguides.rubyonrails.org/active_record_callbacks.html#conditional-callbacks

但使用before_update而不是before_save ..