我使用此页面来帮助我验证是否添加了一个新条目(在我的情况下添加了一个新的练习),这个条目效果很好Check if record exists from controller in Rails
但是,如果我更新/编辑练习,我似乎无法让它发挥作用。
用简单的英语我试图:
获取用户想要编辑(完成)的当前练习记录,用户更新值(完成),提交(完成),控制器检查用户对数据库的输入以查看记录是否已存在同名,如果存在错误,如果不存在,则更新。
感谢。
这是我的控制器中我无法进行更新的部分:
class ExercisesController < ApplicationController
before_action :authenticate_user!, :except => [:index, :show]
before_filter :set_exercise, only: [:show, :edit, :update, :destroy, :upvote, :downvote]
def new
@exercise = Exercise.new
end
def create
@exercise = current_user.exercises.build(exercise_params)
if Exercise.exists?(name: @exercise.name)
flash.now[:danger] = "Exercise has not been created, duplicate entry"
render :new
elsif @exercise.save
flash[:success] = "Exercise has been created"
redirect_to exercises_path
else
flash.now[:danger] = "Exercise has not been created"
render :new
end
end
def edit
if !current_user.admin?
flash[:danger] = "You are not an admin"
redirect_to root_path
end
end
def update
if !current_user.admin?
flash[:danger] = "You are not an admin"
redirect_to root_path
else
if Exercise.where(:name => @exercise.name).any?
flash.now[:danger] = "Exercise has not been updated, duplicate entry"
render :edit
elsif @exercise.update(exercise_params)
flash[:success] = "Exercise has been updated"
redirect_to @exercise
else
flash.now[:danger] = "Exercise has not been updated"
render :edit
end
end
end
private
def exercise_params
params.require(:exercise).permit(:name, :description, :summary)
end
def set_exercise
@exercise=Exercise.find(params[:id])
end
答案 0 :(得分:1)
找到一种更简单的方法来完成这项工作。在模型中,您可以指定唯一性。
class Exercise < ActiveRecord::Base
validates :name, presence: true, :uniqueness => true
所以我的模型看起来像这样更新:
def update
if !current_user.admin?
flash[:danger] = "You are not an admin"
redirect_to root_path
else
if @exercise.update(exercise_params)
flash[:success] = "Exercise has been updated"
redirect_to @exercise
else
flash.now[:danger] = "Exercise has not been updated"
render :edit
end
end
end