2014-04-21 26 views
12

için giriş için Min. Değeri SImpleForm ile basit bir para girişi oluşturmak istiyorum. bu kullanıcı Basit formu ile dk değerini tanımlamak için nasıl bilmiyorum Ancak değerini 0'danBasit Form

giremezsiniz

O yüzden para alan, 0 bir minimum değere sahip olmalıdır.

Mümkün mü acaba?

cevap

18

Kesinlikle! İstediğiniz form için (basitleştirilmiş) HTML şuna benzer:

<form> 
    <input type="number" min="0" step="any" name="amount"> 
</form> 

Bildirimi girişi alanına iki gerçekten önemli özellikleri: min negatif sayıların izin vermez, çünkü 0 olarak ayarlanır ve step edilir ondalık değerlere izin vermek istediğiniz için any olarak ayarlanmıştır. Örneğin, yalnızca dolar tutarlarını istediğinizde, örneğin step="1"'u ayarlayabilirsiniz. Ayrıca, maksimum bir değer belirlemek isterseniz max özniteliğine sahip olabilirsiniz.

Önemli Not:, yalnızca istemci tarafında doğrulama gerçekleştirir. Ne yaptığınızı biliyorsanız bunu geçersiz kılmak mümkündür, bu nedenle bu formla gönderilen girdinin sunucuda geçerli olduğunu doğruladığınızdan emin olun.

Ben Yakut adam değilim, ama Simple Form docs aracılığıyla okuma, ben bu işe gerektiğini düşünüyorum:

<%= simple_form_for @transaction do |f| %> 
    <%= f.input :amount, input_html: { min: '0', step: 'any' } %> 
    <%= f.button :submit %> 
<% end %> 

varsayarsak tutar Modelinizdeki bir sayı türüdür, otomatik olarak bir giriş [tipi yapacaktır = sizin için numara].

+0

Bu, daha yeni sürümlerinde çalışmıyor. Şunun gibi bir şey deneyin: 1.0..200.0, adım: 1'. Aşağıdaki cevapta bir örnek gösterilmektedir. – schlenger

5

simple_form model niteliklerini temel alan giriş özniteliklerini ayarlayacaktır; bu, istemci tarafınızın ve sunucu tarafındaki doğrulamanızın, HTML5'in yeni girdi türlerini ve özelliklerini ve daha eski kullanıcıları destekleyen süslü modern tarayıcılarla eşleşeceği ve bunları kapsayacağı anlamına gelir. olmayan tarayıcılar.

class Purchase < ActiveRecord::Base 
    validates :amount, numericality: { greater_than_or_equal_to: 1 } 
end 

Ve bu görünüm: bu model Verilen örnek için

,

<%= simple_form_for Purchase.new do |f| %> 
    <%= f.input :amount %> 
<% end %> 

böyle bir şey (Ben netlik için bazı özelliklerini kaldırdık) bakacağız çıkan işaretleme:

<form …> 
    <div> 
    <label for="purchase_amount">Amount</label> 
    <input id="purchase_amount" name="purchase[amount]" 
      min="1" step="1" type="number" /> 
    </div> 
</form> 

Başka bir yanıtta belirtildiği gibi, varsayılan öznitelikleri geçersiz kılmak isterseniz, input_html seçenek #input arayarak:

<%= simple_form_for Purchase.new do |f| %> 
    <%= f.input :amount, input_html: { min: 0 } %> 
<% end %> 
+0

Tam olarak doğruları koydum: miktar, sayısallık: {more_than_or_equal_to: 1} 'modelimin özniteliğine ve bu da 'min' özniteliğini' miktar 'girişine eklemez. Cevabınızı doğrulayan belgelere bir bağlantı gönderebilir misiniz? – pmichna

+0

Bu tam olarak dokümantasyon değildir, ancak işte bu işlevselliği onaylayan basit bir test vakası sunulmuştur: https://github.com/plataformatec/simple_form/blob/749c926140ee383e8249f15d1846f5287c5a4c46/test/inputs/numeric_input_test.rb#L30-L36 – georgebrock

2
simple_form.rb içinde çalışmalarına @ georgebrock cevabı için

, (veya kullanmak ne olursa olsun adı, simple_form_bootstrap.rb olabilir) değiştirmek gerekir:

b.optional :min_max 

To:

b.use :min_max 

Girişi çizmek için kullanılan sarıcı için.

"İsteğe bağlı", basit formun bileşeni kullanacağı, ancak otomatik olarak arama yapmayacağı anlamına gelir, belirtmenize izin verir: min: ve girişteki maks. Paramlar el ile.

+0

Benim için çalıştı: L – Qwertie

+0

Bunun çalışması için 'büyük_than_or_equal_to' ve' less_than_or_equal_to' sayısallaştırma doğrulayıcı aralıkları kullanmanız gerekir, 'büyük_than' veya 'less_than' değil. –

+0

çalıştı, büyük teşekkür – bjornmelgaard