ssc*_*rus 2 validation model ruby-on-rails ruby-on-rails-3
我想做两个简单的自定义验证:
if project.end < project.start, raise an exception.
if project.start, set project.active to equal true
Run Code Online (Sandbox Code Playgroud)
我的代码(可能非常不正确)不起作用:
class Project < ActiveRecord::Base
before_save :check_data # now changed to before_validation
def check_data
if end < start
errors.add(:base, 'Project end date must be after project start date.')
end
if start
active = true
end
end
Run Code Online (Sandbox Code Playgroud)
错误正在被添加,但我没有被带回到带有错误消息的表单 - 在用户端似乎一切都很好.
此外,该字段active在数据库中不会更改.
控制器代码:
@project = Project.find(params[:id])
if @project.update_attributes(params[:project])
redirect_to home_url
else
flash[:error] = "There was an error saving your form."
redirect_to edit_project_url
end
Run Code Online (Sandbox Code Playgroud)
我将上面的代码更改为before_validation,但该active字段仍未在数据库中更改.如何使上述模型代码有效?
self.active.要使错误条件正常工作,请使用before_validation而不是before_save.
成功条件不正常,因为active赋值是局部变量,而不是模型属性.你必须在这里明确使用"自我" self.active = true.
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |