Ruby on rails 如果存在具有相同属性的记录,则更改Create的行为
我正在构建一个像reddit这样的应用程序,您可以在其中向特定的用户页面添加提交内容。提交有几个属性,包括一个名为url的属性。 我想检查在添加新提交时,该特定页面是否已经存在具有相同url的提交,如果存在,请投票支持它,而不是将其创建为新提交。如果没有,只需将其添加为新提交。我在这里用的是演技 以下是创建方法:Ruby on rails 如果存在具有相同属性的记录,则更改Create的行为,ruby-on-rails,ruby,validation,activerecord,Ruby On Rails,Ruby,Validation,Activerecord,我正在构建一个像reddit这样的应用程序,您可以在其中向特定的用户页面添加提交内容。提交有几个属性,包括一个名为url的属性。 我想检查在添加新提交时,该特定页面是否已经存在具有相同url的提交,如果存在,请投票支持它,而不是将其创建为新提交。如果没有,只需将其添加为新提交。我在这里用的是演技 以下是创建方法: def create @user = User.friendly.find(params[:user_id]) @submission = @user.submiss
def create
@user = User.friendly.find(params[:user_id])
@submission = @user.submissions.new(submission_params)
@submission.member_id = current_user.id
@submission.creator_id = @user.id
@submission.is_viewed = false
@submission.get_thumb_and_title_by_url(@submission.url)
respond_to do |format|
if @submission.save
format.html { redirect_to @user, notice: 'Submission was
successfully created.' }
format.json { render :show, status: :created, location: @submission }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
你应该看一看
现在我们可以对您的代码进行如下更改
def create
@user = User.friendly.find(params[:user_id])
@submission = @user.submissions.find_or_initialize_by(submission_params)
if @submission.id.present?
# What to do if the record exists
else
# if its a new record
@submission.member_id = current_user.id
@submission.creator_id = @user.id
@submission.is_viewed = false
@submission.get_thumb_and_title_by_url(@submission.url)
end
respond_to do |format|
if @submission.save
format.html { redirect_to @user, notice: 'Submission was
successfully created.' }
format.json { render :show, status: :created, location: @submission }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
我希望这能让你走上正轨
快乐编码请包含您的一些代码包括创建方法,我尝试在保存之前执行一个if块,但它不起作用。我不确定acts_as_votable部分,但我认为您可能可以通过传递url和create_with来使用find_或create_,如果其他数据是新的,则可以使用create_。然后,做你的投票。将创建新记录,现有记录将只查找/返回,然后在两种情况下进行投票,通过acts_as_votable进行投票