2013-02-07 60 views
0

在我的用戶控制人有我新,創造行動..error_messages不被顯示

def new 
@user = User.new 
end 
def create 
    @user.save! 
end 

和我new.html.haml是..

- form_for @user do |f| 
    = f.error_messages 
    = label_tag "User Name" 
    = f.text_field :user_name 
    %br 
    = submit_tag 'Add', :disable_with => "Creating…" 

User.rb(型號)

validates_uniqueness_of :config_name 

但是,如果我點擊提交按鈕與文本字段中已經採取的值,它不會顯示錯誤信息。但拋出一個異常。

ActiveRecord::RecordInvalid in UsersController#create 

    Validation failed: has already been taken 

請任何人告訴我爲什麼它不顯示錯誤信息。

回答

2

您正在使用#save!,當驗證失敗時會引發異常。您應該使用#save或仍然使用#save!,但將其包裹在救援塊內。

def create 
    if @user.save 
    redirect_to @user, notice: 'Created!' 
    else 
    render :new 
    end 
+0

如果I M使用#Save,它只需插入記錄在表中沒有顯示錯誤。 (我想顯示rails的內置錯誤)。 –

+1

'save!'和'save'的唯一區別就是它們在驗證失敗時的反應方式。 'save!'引發異常,'save'返回false。您需要在更新後的答案中添加更多代碼到您的控制器中 – jvnill

0

看到save!

def create 
    unless @user.save 
    render :action => :new 
    end 
end