Я был на это некоторое время и нуждался в более разумном мнении. Я пытаюсь проверить код доступа, который у меня есть в моей базе, соответствует паролю, который вводит пользователь, чтобы удалить запись. Я считаю, что я должен делать это в модели, и я рефакторинг использую метод before_destroy. Однако я не могу даже запустить метод before_destroy, когда я нажимаю кнопку удаления, которую я сделал. Однако контроллер выполняет метод уничтожения.Rails не может получить before_destroy для вызова при удалении
Посмотреть
<%= button_to('Destroy', @dish, method: "delete") %>
модель - путы passcode_check? никогда не вызывается из того, что я вижу
class Dish < ActiveRecord::Base
before_destroy :passcode_check?
validates :username, presence: true
validates :passcode, presence: true
validates :guests, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
private
def passcode_check?
puts "passcode_check?"
if @dish.passcode != params[:pass]
@dish.errors.add(:base, 'Unable to delete record; Reason: Passcodes did not match.')
return false
else
@dish.errors.add(:base, 'test.')
return false
end
end
end
Controller - этот метод наплыва, как я хочу, чтобы проверить в модели
def destroy
if @dish.passcode == params[:pass]
@dish.destroy unless @dish.errors
respond_to do |format|
format.html { redirect_to dishes_url, notice: 'Record delete.' }
format.json { head :no_content }
end
else
respond_to do |format|
format.html { redirect_to @dish, action: 'show', notice: 'Unable to delete record; Reason: Passcodes did not match.' }
format.json { render json: @dish.errors, status: :unprocessable_entity }
end
end
end
Есть ли '@ dish.errors'? –
Действительно ли запись полностью уничтожена? – Niall