1

消息我有一個ActiveRecord模型帳戶:刪除「驗證失敗」異常返回信息

class Account < ActiveRecord::Base 

    attr_accessible :msisdn 

    validates_uniqueness_of :msisdn, :on => :create, 
    :message => "User Already Registered ." 
end 

而且我有一個控制器,它試圖創建一個帳戶:

begin 
    account = Account.create!(:msisdn => user) 
rescue Exception => e 
    $LOG.error "Account #{user} : --> #{e.message}" 
end 

現在電子。消息總是返回:驗證失敗:Msisdn用戶已經註冊,我怎麼只想得到只是消息就像用戶已註冊。請注意,我沒有使用的意見在所有的,我想從控制器使用它,我用Rails 3

在此先感謝

回答

7

當有效嗎?在任何模型(從create/save/update_attributes發生)上調用它會在模型​​上填充錯誤對象。 當然,如果您使用爆炸方法(創建!),那麼分配將永遠不會發生,因此請使用非爆炸方法。請參閱第3個代碼段。

account = Account.new(:msisdn => user) 
unless account.save # 
    # account.errors will be populated with errors 
    puts account.errors[:msisdn] # => ['User Already Registered'] 
end 

替代使用爆炸方法

account = Account.new(:msisdn => user) 
begin 
    account.save! 
rescue Exception 
    puts account.errors[:msisdn] 
end 

編輯:

望着鐵軌API文檔後,另一種方法是從異常得到記錄,它存儲的副本。這使我原來的陳述是虛假的。

ActiveRecord::RecordInvalidgithub

begin 
    account = Account.create!(:msisdn => user) 
rescue ActiveRecord::RecordInvalid => e 
    puts e.record.errors[:msisdn] # => ['User Already Registered'] 
end 
5

添加兩件事情 「配置/區域/ en.yml」:

en: 
    activerecord: 
    errors: 
     messages: 
     record_invalid: "%{errors}" 
    errors: 
    format: "%{message}" 

(或相應的翻譯文件爲準語言你碰巧支持) 。

注意:這是在rails 5中測試過的,但是對rails 3 docs的快速掃描讓我覺得它也可以在那裏工作。

相關問題