рельсы 3, как маршрутизировать find_or_create_by - PullRequest
1 голос
/ 14 декабря 2011

У меня есть find_or_create_by:

def create
     @code = Code.find_by_code(params[:redemption][:code])
     @redemption = @code.redemptions.find_or_create_by_user_id(current_user.id) 
      if @redemption.save
        redirect_to bands_url, :notice => "Redemption Successful."
      else
        redirect_to bands_url, :notice  => "Could not redeem code"
      end
  end

Если пользователь «выкупает» код один раз, он работает нормально.Если они пытаются выкупить тот же самый код снова, он по-прежнему выдает уведомление «Погашение успешно» ... Я предполагаю, что это потому, что он нашел @ code.redemption ... Как я могу сделать так, чтобы, если он создает выкуп,он говорит: «Погашение успешно», хотя новое искупление не создано ... Оно просто нашло его.Я бы хотел сказать: «Погашение уже использовано»

1 Ответ

1 голос
/ 14 декабря 2011

Вместо find_or_create_by вы можете сделать следующее:

@redemption = @code.redemptions.find_or_initialize_by_user_id(current_user.id)
if @redemption.new_record? && @redemption.save
  redirect_to bands_url, :notice => "Redemption Successful."
else
  redirect_to bands_url, :notice => "Could not redeem code."
end

Таким образом, вы можете определить, является ли это новая запись (initialize_by) или существующая запись (находка)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...