1

我有两个下拉列表。一个包含项目bmp_id的子列表和一个包含项目的子列表bmp_id(在本例中为 2),每个项目都有一个唯一的bmpsublist_id. 主下拉列表中的选项之一包括五个带有bmpsublist_id[3, 4, 5, 6] 的子列表选项。我想让它使用户只能拥有一个bmpsublist_id带有[4、5 和 6] 的子列表选项,它bmpsublist_id不应该是唯一的,并且无论是否添加了其他选项都可以添加。当您提交表单时,bmp_idbmpsublist_id被添加到名为 Bmp 的表中。

这是我在模型中使用的验证:

validates_uniqueness_of :bmp_id, :message => "TODO", if: "bmpsublist_id == 4 || bmpsublist_id == 5 || bmpsublist_id == 6 || bmpsublist_id == 7"

此验证的问题是,如果您首先添加带有bmpsublist_id3 的选项,则您不能再添加带有bmpsublist_id4、5 和 6 的选项,即使bmpsublist_id已经有 3的记录,我仍然希望能够添加这些选项被添加。但是,如果您添加bmpsublist_id4、5 或 6 的其中之一,您仍然可以添加我不想更改的 3。

有任何想法吗?对不起,如果这超级混乱。我真的不知道如何很好地解释事情。

更新:

我想通了,答案在下面

4

1 回答 1

1

实际上只是想通了,它似乎完美无缺。这就是我放入模型的内容。我为条件语句使用了一个函数,而不仅仅是一个字符串

  #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
于 2016-06-21T18:45:50.613 回答