目前,我的控制器允许用户一次提交多个“链接”。它将它们收集到一个数组中,为该用户创建它们,但捕获任何错误供用户返回并修复。如何忽略该用户已经存在的任何链接的创建?我知道我可以将 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 个对他来说已经存在,那么我只想忽略这 2 个,而创建另外 3 个。我该怎么做呢?
编辑:感谢Kandada,我现在正在使用这个:
@links = params[:links].values.collect.reject{ |link| current_user.links.exists?(:url=>link[:url])}
@links = @links.collect{ |链接| current_user.links.create(link) }.reject { |p| p.errors.empty?}
所以我将两者分开,首先检查是否存在,然后创建那些没有被拒绝的。有没有更好的方法来做到这一点,比如结合这两个语句可能会提高性能?如果没有,我想我很满意。(再次感谢 Kandada 和 j。)