Rails 5 throw abort:如何设置错误消息?

时间:2016-07-28 00:28:46

标签: activemodel ruby-on-rails-5

Rails引入了这种*语法,但现在我如何获得有意义的销毁错误?

对于验证错误,可以做

throw(:abort)

这是我的模特

if not user.save
  # => user.errors has information

if not user.destroy
  # => user.errors is empty

2 个答案:

答案 0 :(得分:17)

您可以使用SELECT * FROM ...作为课程方法。

用户模型:

SELECT

用户控制器:

errors.add

答案 1 :(得分:3)

Gonzalo S answer完全没问题。如果你想要更清洁的代码,你可以考虑一个帮助方法。以下代码在Rails 5.0或更高版本中效果最佳,因为您可以使用ApplicationRecord模型。

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true

private

  def halt(tag: :abort, attr: :base, msg: nil)
    errors.add(attr, msg) if msg
    throw(tag)
  end

end

现在你可以做到:

class User < ApplicationRecord

  before_destroy(if: :condition) { halt msg: 'Your message.' }

  # or if you have some longer condition:
  before_destroy if: -> { condition1 && condition2 && condition3 } do
    halt msg: 'Your message.'
  end

  # or more in lines with your example:
  before_destroy :destroy_validation, if: :some_reason

private

  def destroy_validation
    halt msg: 'Your message.' if some_condition
  end

end