0
我用這個頁面來幫我驗證,如果加入這偉大的工作Check if record exists from controller in Rails導軌 - 更新/編輯檢查記錄由控制器
一個新條目(在我的情況下添加一個新的運動)的存在,但我不能很如果我正在更新/編輯練習,它似乎可以起作用。
用簡單的英語我想:
獲取用戶希望編輯(完成)當前鍛鍊記錄,用戶更新值(已完成),提交(完成),控制器檢查用戶的輸入對db來查看一個記錄是否已經存在同名,如果存在錯誤,如果不存在,則更新。
謝謝。
這裏是我的控制,我不能完全得到去爲更新的一部分:
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
什麼是不工作?你有錯誤嗎? – margo
DB搜索區分大小寫。因此,Exercise.where(:name => @ exercise.name).any?將始終返回false如果名稱具有不同的大寫/小寫 –
不工作的部分是我在if語句中的邏輯 - 我無法讓控制器將用戶的輸入與表中的其他練習名稱進行比較,就像我在創造,它要麼總是回來說重複的條目(如果沒有)或允許我進行更改,並且已經有一些具有完全相同的名稱。 @CristianoAlencar,很好地瞭解大寫/小寫,如果是這種情況,如果陳述會起作用,因爲每個練習名稱都以大寫字母開始 - 例如騎自行車 –