«Реальный» ответ на вашу проблему заключается в том, что эти типы ограничений должны проверяться в модели, а не в контроллере (можно даже утверждать, что это следует проверять на уровне базы данных, но Rails просто не создан таким образом. 1001 *
Вы можете легко использовать метод validates_uniqueness_of
в вашей модели, например ::
class Relationship < ActiveRecord::Base
belongs_to follower
belongs_to followed_user
validates_uniqueness_of :followed_user, :scope => :follower
end
Что означало бы, что каждое, что followed_user
должно быть уникальным для каждого последователя.
Что касается вашего исходного кода, трудно сказать, что происходит не так. Это может зависеть от того, откуда взялся follows_arr
- возможно, он содержит некоторые кэшированные данные, или вы где-то кэшировали переменную самостоятельно.
Но хотя это будет полезный учебный опыт, позволяющий выяснить, почему оригинальное решение не работает, для решения исходной задачи вам будет лучше поместить код в модель, которой он принадлежит.
Если вам нужно что-то сделать в контроллере, вы можете проверить так:
def follow
...
if current_user.save
# In this case everything was saved all right
else
# the user couldn't be saved for some reason (validation failed)
end
end