【发布时间】:2017-07-24 21:49:51
【问题描述】:
我的 Rails 应用发生了一些奇怪的事情。每次用户访问我之前创建的唯一 url 时,都会调用控制器操作并将记录保存到表中。
不幸的是,有时会创建两条相同的记录,而不是只创建一条。我添加了一个“validates_uniqueness_of”,但它不起作用。
我的控制器代码:
class ShorturlController < ApplicationController
def show
@shorturl = ShortUrl.find_by_token(params[:id])
@card = Card.find(@shorturl.card_id)
@subscriber = BotUser.find_by_sender_id(params['u'])
@letter_campaign = Letter.find(@card.letter_id).campaign_name.downcase
if AnalyticClic.where(card_id: @card.id, short_url_id: @shorturl.id, bot_user_id: @subscriber.id).length != 0
@object = AnalyticClic.where(card_id: @card.id, short_url_id: @shorturl.id, bot_user_id: @subscriber.id)
@ccount = @object[0].clicks_count
@object.update(updated_at: Time.now, clicks_count: @ccount += 1)
else
AnalyticClic.create(card_id: @card.id, short_url_id: @shorturl.id, bot_user_id: @subscriber.id, clicks_count: "1".to_i)
end
@final_url = @card.cta_button_url
redirect_to @final_url, :status => 301
end
end
还有模特:
class AnalyticClic < ApplicationRecord
validates_uniqueness_of :bot_user_id, scope: :card_id
end
知道为什么有时我会重复记录吗? if 应该防止这种情况以及 validates_uniqueness_of。
【问题讨论】:
-
您应该在数据库级别进行验证检查,而不仅仅是在模型上。见does-rails-need-database-level-constraints
标签: ruby-on-rails ruby