1

2 つのドロップダウン リストがあります。を含むアイテムと、それを含むアイテム(この場合は 2) をbmp_id含むサブリストで、それぞれに一意の があります。メイン ドロップダウン リストのオプションの 1 つには、[3, 4, 5, 6] が付いた 5 つのサブリスト オプションが含まれます。ユーザーが[4、5、および6]のサブリストの選択肢の1つしか持てないようにしたいのですが、これは一意ではなく、他のものが追加されているかどうかに関係なく追加できます。フォームを送信すると、とが Bmp というテーブルに追加されます。bmp_idbmpsublist_idbmpsublist_idbmpsublist_idbmpsublist_idbmp_idbmpsublist_id

これは、モデルで使用している検証です。

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

この検証の問題は、最初に 3 のオプションを追加すると、4、5、および 6 のオプションを追加bmpsublist_idできなくなり、3 のレコードが既に追加されていても追加できるようにしたいことです。追加されました。しかし、 が4、5、または 6 のものの 1 つを追加しても、私が変更したくない 3 のものを追加することができます。bmpsublist_idbmpsublist_idbmpsublist_id

何か案は?これが非常に紛らわしい場合は申し訳ありません。物事をうまく説明する方法が本当にわかりません。

アップデート:

私はそれを理解しました、答えは以下です

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 に答える