إجبار أسماء الحقول "المتوافقة مع البشر" على أن تكون صغيرة في Rails 3

StackOverflow https://stackoverflow.com/questions/4846841

سؤال

بقدر ما أعرف، الطريقة المقبولة لتعيين أسماء الحقول "المتوافقة مع البشر" في 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;
}

أفضّل حلاً مختلفًا أيضًا.لكن هذا هو الوحيد الذي تمكنت من العثور عليه حتى الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top