2017-02-22 55 views
1

我一直在閱讀rails和ruby教程,剛開始使用我的第一個項目。一切都很順利,但我有一個問題,顯示新用戶的驗證錯誤。這是我的控制器代碼:似乎無法在軌道上顯示驗證錯誤

class UsersController < ApplicationController 

    def new 
    @user = User.new 
    end 
    def create 
    @user = User.new(user_params) 
    if @user.save 
     redirect_to '' 
    else 
     redirect_to '/signup' 
    end 
    end 
    private 
    def user_params 
    params.require(:user).permit(:name, :lastname, :nickname, :email, :password) 
    end 
end 

這是我的形式。我省略了所有輸入,但暱稱之一,因爲我正在用它來測試驗證。

<%= form_for(@user) do |f| %> 
    <div class='form-group'> 
     <%= f.text_field :nickname, :placeholder => "User name", :class => "form-control", :required => true, :minlength => "2", :maxlength => "24" %> 
     <div class="text-danger"> 
      <%= @user.errors[:nickname][0] %> 
     </div> 
    </div> 
<% end %> 

我只是顯示第一相關的錯誤,看看它的工作,並避免任何If語句時,我會懷疑它是否工作或沒有。類上的驗證是:

class User < ApplicationRecord 
    has_many :books 
    has_secure_password 
    validates :nickname, uniqueness: true 
end 

當我創建通過控制檯的新用戶,並嘗試將其與相同的暱稱作爲另一個它不會救人救,所以確認工作正常。但是在視圖中沒有顯示錯誤,它只是返回到註冊表單,這就是全部。我使用的是Ruby 2.2.6和Rails 5.0.1。如果我錯過了任何東西,請告訴我。

回答

2

而是重定向的渲染new動作模板:

def create 
    @user = User.new(user_params) 
    if @user.save 
     redirect_to '' 
    else 
     render 'new' 
    end 
    end 

包含驗證錯誤當你重定向你鬆@user對象。這就是爲什麼他們不可見

+0

非常感謝,它現在正在工作。 –

+1

@FranciscoRupto歡迎您。如果我的回答對您有幫助,請不要忘記將其標記爲已接受,方法是單擊答案旁邊的複選標記以將其從空心切換爲綠色 –

+0

雖然這很有效,但我有一個小問題。如果驗證沒有通過,並呈現#new顯示錯誤,則網址顯示「website.com/user」。由於索引操作不存在,因此如果重新加載,它無法找到該頁面。我如何更改地址欄上顯示的網址? –