我有一个安装和版本模型以及多个版本的安装。通过安装,您可以创建许多版本,并且用户需要选择将在版本数据库中使用布尔数据类型标记为默认的版本。
如何确保用户从安装屏幕中的许多不同版本的列表中选择了一个版本。只能选择一个,然后将版本模型的default
字段更改为“是”'并且属于该安装的所有其他版本都设置为' NO'
答案 0 :(得分:1)
我建议您在安装模型中添加foreign_key :default_version_id
以跟踪默认版本,而不是使用Version类中的整个列来实现此目的。这将使验证更容易。
无论如何,对于当前的实现,验证规则看起来像这样:
Class Installation < ActiveRecord::Base
has_many :versions
validate :default_version_must_be_selected
private
def default_version_must_be_selected
if versions.collect{|v| v if(v.default == true)}.compact.length != 1
errors.add(:base, 'one default version is required'
end
end
end
修改强>
从default
移除Version
标记并将default_version_id
添加到Installation
后,实施会更直接:
Class Installation < ActiveRecord::Base
has_many :versions
belongs_to :default_version, class_name: 'Version'
validates_presence_of :default_version_id
end
我认为您会发现使用此方法可以更轻松地与安装默认版本进行交互。这只是一个联想。