ben aşağıdakileri öneririz. Saç rengi için bir dize sütunu oluşturun. Bu normalde bir numaralandırma sütunu olur (ENUM
), ancak geçişlerinizde bazı SQL'le tamam değilseniz, bu Rails tarafından desteklenmez.
Modelinizde, renkleri birkaç geçerli değerle sınırlayın.
Sonra
class User < ActiveRecord::Base
# Store the colours in the database as string identifiers (my preference
# would be English, lower case, with underscores). Only accept known values.
validates_inclusion_of :hair_colour, :in => %w{brown white red dark_brown}
end
, config/locales/en.yml
içinde:
en:
user:
hair_colours:
brown: brown
white: white
red: red
dark_brown: dark brown
Ve config/locales/de.yml
yılında:
<%= t "user.hair_colours.#{@user.hair_colour}" %>
Yoksa yazabilirsiniz:
de:
user:
hair_colours:
brown: braun
white: weiss
red: rot
dark_brown: dunkelbraun
Herhangi bir görünümde, yapabileceğiniz 01'de yardımcı metodu:
def translated_hair_colour(user)
t "user.hair_colours.#{user.hair_colour}"
end
Ben çeviri sunumun bir endişe prensipte olduğuna inanıyoruz Çünkü, User
modeline bir yöntem yaratmak olmaz ama prensipte durdurma şey yapmaktan vardır:
class User
# ...
def hair_colour_name
I18n.t "user.hair_colours.#{hair_colour}"
end
end
Güncelleme:
tra olan bir görünümde seçme kutuları yapma nslated iki şekilde yapılabilir. ilk seçenek, çevrilmiş değerleri kaynak olarak kullanmaktır. Bu, çevirilerin eksiksiz ve doğru olmasını gerektirir. Tüm değerler tercüme edilmezse, eksik değerler seçim kutusunda gösterilmeyecektir.
<%= form_for @user do |user| %>
<%= user.select :hair_colour, t("user.hair_colours").invert %>
<%= user.submit %>
<% end %>
İkinci seçenek modelinizden doğrulama değerlerini kullanmaktır. Bu "doğru" yoldur, ancak doğrulama ayarlarında hafif bir ayarlama gerektirir. senin görüşlerinde
class User < ActiveRecord::Base
HAIR_COLOURS = %w{brown white red dark_brown}
validates_inclusion_of :hair_colour, :in => HAIR_COLOURS
end
Şimdi
,: Elbette
<%= form_for @user do |user| %>
<%= user.select :hair_colour,
User::HAIR_COLOURS.map { |c| [t("user.hair_colours.#{c}"), c] } %>
<%= user.submit %>
<% end %>
, haritalama kolayca yardımcı ekstre edilebilir.
Hmmm sesi güzel ..! Teşekkürler! ama belki daha akıllı bir çözüm var mı? Eğer ödül daha iyi bir şey getirmezse, bunu cevap olarak kontrol edecek ...! – Lichtamberg
Bu çözümle select_box'ları nasıl yapacağınızı söyleyebilir misiniz? Cevap verirseniz cevabınızı kabul edilir olarak işaretleyiniz ... Thx! – Lichtamberg
@Lichtamberg: Sorun değil! Cevap güncellendi. – molf