我有一个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如果用户“赎回”一次代码,代码就能正常工作。如果他们再次尝试赎回相同的代码,它仍然会发出"Redemption Successful“的通知。我猜想这是因为它找到了一个@code.redemption...我如何才能使它在创建赎回时,即使没有创建新的赎回,也会显示“赎回成功”...它只是简单地找到了它。我想说的是:“赎回已经被使用了”
发布于 2011-12-14 10:13:12
您可以执行以下操作,而不是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)还是现有记录(find)
https://stackoverflow.com/questions/8498766
复制相似问题