如何使用 validates_uniqueness_of 一个 id 但仅用于具有相同 id 的项目列表中的某些项目。 rails
How to use validates_uniqueness_of an id but only for some items out of a list of items with the same id. rails
我有两个下拉列表。一个包含具有 bmp_id
的项目和一个子列表,其中包含具有 bmp_id
的项目(在本例中为 2),每个子列表都有一个唯一的 bmpsublist_id
。主下拉列表中的一个选项包括五个带有 bmpsublist_id
的 [3, 4, 5, 6] 的子列表选项。我想这样做,以便用户只能有 ONE 个子列表选择 bmpsublist_id
的 [4、5 和 6] bmpsublist_id
应该不是唯一的,并且无论是否添加了其他人都可以添加。当您提交表单时,bmp_id
和 bmpsublist_id
被添加到名为 Bmp 的 table。
这是我在我的模型中使用的验证:
validates_uniqueness_of :bmp_id, :message => "TODO", if: "bmpsublist_id == 4 || bmpsublist_id == 5 || bmpsublist_id == 6 || bmpsublist_id == 7"
此验证的问题是,如果您首先添加带有 bmpsublist_id
3 的选项,您将无法再添加带有 bmpsublist_id
的 4、5 和 6 的选项,而我想要即使已经添加了 bmpsublist_id
of 3 的记录,仍然可以添加一个。但是,如果您添加 bmpsublist_id
的 4、5 或 6 之一,您仍然可以添加我不想更改的 3。
有什么想法吗?抱歉,如果这太令人困惑了。我真的不知道怎么解释好。
更新:
我想通了,答案在下面
实际上只是弄明白了,而且它似乎工作得很好。这就是我放入模型中的内容。我为条件语句使用了一个函数,而不仅仅是一个字符串
#validations
validates_uniqueness_of :bmp_id, :message => "TODO", if: :pad_and_pipes_exists
def pad_and_pipes_exists
if bmpsublist_id == 4 || bmpsublist_id == 5 || bmpsublist_id == 6 || bmpsublist_id == 7
sublist_ids = Array.wrap([4, 5, 6, 7])
pads_exists = false
sublist_ids.each do |sublist_id|
if Bmp.find_by_bmpsublist_id(sublist_ids) != nil
pads_exists = true
end #end if statement
end #end each statment
end #end first if statement
return pads_exists
end #end function
我有两个下拉列表。一个包含具有 bmp_id
的项目和一个子列表,其中包含具有 bmp_id
的项目(在本例中为 2),每个子列表都有一个唯一的 bmpsublist_id
。主下拉列表中的一个选项包括五个带有 bmpsublist_id
的 [3, 4, 5, 6] 的子列表选项。我想这样做,以便用户只能有 ONE 个子列表选择 bmpsublist_id
的 [4、5 和 6] bmpsublist_id
应该不是唯一的,并且无论是否添加了其他人都可以添加。当您提交表单时,bmp_id
和 bmpsublist_id
被添加到名为 Bmp 的 table。
这是我在我的模型中使用的验证:
validates_uniqueness_of :bmp_id, :message => "TODO", if: "bmpsublist_id == 4 || bmpsublist_id == 5 || bmpsublist_id == 6 || bmpsublist_id == 7"
此验证的问题是,如果您首先添加带有 bmpsublist_id
3 的选项,您将无法再添加带有 bmpsublist_id
的 4、5 和 6 的选项,而我想要即使已经添加了 bmpsublist_id
of 3 的记录,仍然可以添加一个。但是,如果您添加 bmpsublist_id
的 4、5 或 6 之一,您仍然可以添加我不想更改的 3。
有什么想法吗?抱歉,如果这太令人困惑了。我真的不知道怎么解释好。
更新:
我想通了,答案在下面
实际上只是弄明白了,而且它似乎工作得很好。这就是我放入模型中的内容。我为条件语句使用了一个函数,而不仅仅是一个字符串
#validations
validates_uniqueness_of :bmp_id, :message => "TODO", if: :pad_and_pipes_exists
def pad_and_pipes_exists
if bmpsublist_id == 4 || bmpsublist_id == 5 || bmpsublist_id == 6 || bmpsublist_id == 7
sublist_ids = Array.wrap([4, 5, 6, 7])
pads_exists = false
sublist_ids.each do |sublist_id|
if Bmp.find_by_bmpsublist_id(sublist_ids) != nil
pads_exists = true
end #end if statement
end #end each statment
end #end first if statement
return pads_exists
end #end function