2015-12-10 23 views
1

我想顯示在我的輸入字段,所以我做這個錯誤信息軌輸入字段內容清除如果驗證通過將其放在裏面的佔位符失敗

validates :age, numericality: { greater_than_or_equal_to: 18 } 

但是,如果我提交值爲11的年齡,我將會得到一個紅色邊界輸入字段,其值爲11。 如果驗證未通過,我如何清除輸入字段?

我試圖用一個自定義的驗證方法,是這樣的:

validate :minimum_age 

    def minimum_age 
    if age < 18 
     self.errors.add(:age, "must be at least 18 years old!") 
     self.age = nil 
    end 
    end 

這將清除場,但是當它呈現的觀點,我也將有a 'field must not be empty'錯誤,因爲我做到了零。

回答

1

嘗試

<%= f.input :age, label: false, placeholder: "your code", value: nil %> 

順便說一句,你可能想要將你的佔位符消息提取到輔助方法中,現在它已經很混亂了,大聲笑

像:

def render_error_message(f, key) 
    f.object.errors.messages.has_key?(key) ? f.object.errors.messages[:age].join(", ") : "Age*"} 
end 

然後在您的視圖:

<%= f.input :age, label: false, placeholder: render_error_message(f, :age), value: nil %> 
+0

Definetly不會離開20個輸入行的重複代碼:)謝謝,價值:零應該這樣做。 –

0

這是一個非常尷尬的要求,你有;如果你想清除這個值,那麼我會建議在視圖中而不是模型中做,或者你可以選擇使用JS來完成。

+1

哈哈,爲什麼尷尬?我想要做的就是在佔位符內顯示錯誤消息:D –

+0

@BogdanPopa通常佔位符是用於提示,我們傾向於顯示沿輸入行的錯誤消息。 –

0

設法做到這一點通過設置f.object.age = ""

<%= f.input :age, label: false, placeholder: "#{f.object.errors.messages.has_key?(:age) ? "#{f.object.age = ""}Vârstă*" + " " + "(#{f.object.errors.messages[:age].join(", ")})" : "Vârstă*"}" %> 
1

你可以很清楚的,如果現場有錯誤:

unless @user.valid? 
    @user.age = nil if @user.errors.include?(:age) 
end 
+0

當然,但是在將其設置爲無控制器內部之後,在我的f.object.age.errors中,我也會出現:true驗證錯誤。但我會upvote你的建議:) –

+0

這是因爲你只是渲染:新'所以軌道只渲染視圖沒有運行控制器代碼。 –

相關問題