現在、私のコントローラーでは、ユーザーが一度に複数の「リンク」を送信できます。それらを配列に収集し、そのユーザー用に作成しますが、ユーザーが戻って修正できるようにエラーをキャッチします。そのユーザーに対して既に存在するリンクの作成を無視するにはどうすればよいですか? そのユーザーのスコープで validates_uniqueness_of を使用できることはわかっていますが、作成を完全に無視したいと思います。これが私のコントローラーです:
@links = params[:links].values.collect{ |link| current_user.links.create(link) }.reject { |p| p.errors.empty? }
各リンクには URL があるため、そのユーザーの link.url が既に存在するかどうかを確認することを考えましたが、それを行う方法や場所がよくわかりませんでした。どういうわけかこれをコントローラーに付けるべきですか?それとも、before_validation コールバックのように、モデル内の新しいメソッドにする必要がありますか? (注: これらの「リンク」はネストされていませんが、所属先は :user です。)
したがって、可能であれば、これらのリンクの作成を無視できるようにしたいと考えています。たとえば、ユーザーが 5 つのリンクを送信したが、そのうちの 2 つが既に存在している場合、残りの 3 つが作成されている間、それらの 2 つを無視したいと思います。これを行うにはどうすればよいですか?
編集:Kandadaのおかげで、私は今これを使用しています:
@links = params[:links].values.collect.reject{ |リンク| current_user.links.exists?(:url=>リンク[:url])}
@links = @links.collect{ |リンク| current_user.links.create(link) }.reject { |p| p.errors.empty? }
そこで、まず存在するものがあるかどうかを確認し、次に拒否されなかったものを作成するために、2 つを分離しました。おそらく2つのステートメントを組み合わせるとパフォーマンスが向上するなど、これを行うためのより良い方法はありますか? それさえなければ、十分満足だと思います。(神田さん、jさん、ありがとうございました。)