加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何根据其他属性值添加自定义验证消息?

发布时间:2020-12-17 02:03:44 所属栏目:百科 来源:网络整理
导读:我正在使用 Ruby on Rails 3.2.9而我只是想使用 state_machine gem.我有以下声明: # Model class attributes are:## [String] status# [Boolean] checkin_1# [Boolean] checkin_2#class Article ActiveRecord::Base state_machine :attribute = :status,:in
我正在使用 Ruby on Rails 3.2.9而我只是想使用 state_machine gem.我有以下声明:

# Model class attributes are:
#
# [String]  status
# [Boolean] checkin_1
# [Boolean] checkin_2
#
class Article < ActiveRecord::Base
  state_machine :attribute => :status,:initial => :unconfirmed do
    state :confirmed,:value => 'confirmed'
    state :unconfirmed,:value => 'unconfirmed'

    event :confirm do
      transition :unconfirmed => :confirmed
    end

    event :unconfirm do
      transition :confirmed => :unconfirmed
    end
  end
end

我想在触发确认事件并且checkin_1和/或checkin_2值为false时向实例对象添加自定义验证消息(避免保存这些对象).也就是说,鉴于我正在尝试确认以下每个对象:

<#Article id: 1,:status: 'unconfirmed',checkin_1: false,checkin_2: false>
<#Article id: 1,checkin_2: true>
<#Article id: 1,checkin_1: true,checkin_2: false>

然后我想避免保存对象并分别添加错误消息,如下所示:

"can not be confirmed if it is not checked for 1 and 2"
"can not be confirmed if it is not checked for 1"
"can not be confirmed if it is not checked for 2"

我该怎么做?

解决方法

这样做怎么样:

state confirmed do
  validate do
    if !checkin_1 and !checkin_2
       msg = "can not be confirmed if it is not checked for 1 and 2"
       errors.add(:checkin_1,msg)
       errors.add(:checkin_2,msg)
    elsif !checkin_1
       errors.add(:checkin_1,"can not be confirmed if it is not checked for 1")
    elsif !checkin_2
       errors.add(:checkin_2,"can not be confirmed if it is not checked for 2")
    end
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读