إجبار أسماء الحقول "المتوافقة مع البشر" على أن تكون صغيرة في Rails 3
-
27-10-2019 - |
سؤال
بقدر ما أعرف، الطريقة المقبولة لتعيين أسماء الحقول "المتوافقة مع البشر" في Rails 3 هي استخدام اللغات:
# config/locales/en.yml
en:
activerecord:
attributes:
member:
username: 'username' # rather than 'Username'
ومع ذلك، أريد ببساطة أن يستخدم Rails 3 إصدارات صغيرة من أسمائه الافتراضية المتوافقة مع البشر.هل هناك طريقة سهلة ومدمجة للقيام بذلك؟
مثال للمساعدة في التوضيح:عندما تكون داخل أ form_for
, <%= f.label :username %>
يعرض "اسم المستخدم" افتراضيًا.أريد أن يعرض "اسم المستخدم".
المحلول
ال label
المساعد الافتراضي للاستخدام human_attribute_name لتحويل الصفة إلى اسم إنسان.ولو نظرت إلى المصدر human_attribute_name
يحاول بعض الأشياء قبل أن يتراجع إليها attributes.to_s.humanize
.يحاول الترجمة أولاً، ثم يبحث عن ملف :default
الخيار في تجزئة الخيارات.
لذا، فإن أبسط/أفضل طريقة للحصول على الوظيفة التي تريدها هي التجاوز human_attribute_name
مع الخاص بك الذي يوفر أ :default
الخيار ثم يستدعي الأصلي.توفر Rails طريقة معقولة للقيام بهذا النوع من الأشياء alias_method_chain
, ، لذا...
لقد سمعت ما يكفي، فقط أعطني الجواب!
ضع ما يلي في أي ملف config/initializers
وأعد تشغيل تطبيقك:
module ActiveModel
module Translation
def human_attribute_name_with_foo attribute, options = {}
human_attribute_name_without_foo attribute, options.merge( :default => attribute.humanize.downcase )
end
alias_method_chain :human_attribute_name, :foo
end
end
نصائح أخرى
كان لي نفس المشكلة.لقد قمت بحلها عبر CSS:
في foo.html.erb:
<%= f.label :username, :class => "my_class" %>
في bar.css:
label.my_class {
text-transform: lowercase;
}
أفضّل حلاً مختلفًا أيضًا.لكن هذا هو الوحيد الذي تمكنت من العثور عليه حتى الآن.