wake-up-neo.com

Rails: Wie kann ich das Sternchen in den Pflichtfeldern des Formulars deaktivieren?

Wenn ich das 'Required' Attribut hinzufüge
an HTML-Eingabefelder, Rails hängt ein Sternchen (*) vor dem Label an. 

Weiß jemand, wie man das verhindern kann?

Aus irgendeinem Grund transformiert Rails dies:

<%= f.input :Company, :input_html => {:value => "", :id => "company_name"}, :label => "company name" %>

das sehr gut finden:

<div class="input string required">
    <label for="company_name" class="string required">
    <abbr title="required">*</abbr> company name</label>
    <input type="text" value="" size="50" required="required" name="lead[Company]" id="company_name" class="string required">
</div>

Ich mag es nicht, dass alles in einem DIV eingeschlossen wird und der Partei ein ABBR-Element hinzugefügt wird.

Wie kann ich das verhindern?

36
vsync

Fügen Sie in config/initializers/simple_form.rb folgende Zeile hinzu:

config.label_text = lambda { |label, required| "#{label}" }
33
Shane Andrade

Sie können den erforderlichen Wert in der Ländereinstellungsdatei von simple_form einfach auf einen leeren Wert setzen:

en:
  simple_form:
    required:
      text: 'required'
      mark: '*'

Oder verwenden Sie CSS zum Ausblenden.

46
RocketR

Ich verwende Rails 3.1 und ich habe den folgenden Ansichtscode in meinem _form.html.erb für ein bestimmtes Modell:

<div>
  <%= f.label :full_name %><br/>
  <%= f.text_field :full_name, :required => true %><br/>
</div>

Das Etikett zeigt kein Sternchen, wenn Sie dies auf diese Weise tun. Wenn Sie keinen Code schreiben, kann ich nicht sicher sein, wie Sie vorgehen und ob meine Lösung zu dem genannten Ansatz passen würde.

Aktualisierte Antwort: Es scheint, als hätten Sie diesen Code von jemandem geerbt. Nach dem Lesen Ihres Codebeispiels verwenden Sie auf jeden Fall den simple_form gem. Informationen zu diesem Edelstein finden Sie hier https://github.com/plataformatec/simple_form . Beantworten Sie Ihre Frage jedoch, wenn Sie Ihren Code wie folgt ändern:

<%= f.input :Company, :input_html => {:value => "", :id => "company_name"}, :label => "company name", :required => false %>

Das sollte das Sternchen ausschalten.

Ich würde hinzufügen, basierend auf Ihrem Ekel für den aus simple_form generierten HTML-Code. Es klingt so, als müssten Sie den Edelstein weglassen und Ihren Formularcode mit Hilfe der Rails-Standard-Formular-Helfer neu schreiben, die Sie hier lesen können. Http: //guides.rubyonrails.org/form_helpers.html . Abhängig von der Größe der Codebasis können Sie besser aufsaugen und lernen, wie Sie den simple_form-gem verwenden, um Zeit zu sparen. Wenn Sie jedoch der Meinung sind, Sie hätten die Zeit, alles zu ändern, sollten Sie dies tun.

20
Lester Peabody

Der einfachste Weg ist es mit dieser CSS zu verstecken:

abbr[title="required"] {
  display: none;
}
15
VoA

Es ist überhaupt nicht Rails. Es ist die simple_form gem. Wenn Sie also nicht möchten, dass alle Umhüllungselemente nicht simple_form verwenden. Verwenden Sie Rails form helpers . Es wäre einfacher als das Anpassen von etwas, das Sie nicht mögen.

5
lucapette

Code, der mir beim Lösen des Sternchenproblems geholfen hat:

abbr[title="required"] {
  display: none;
}

Die gewählte Antwort und die anderen Vorschläge, in denen die HTML-Datei in der Datei "locales" geändert werden soll, helfen mir mit dem neuesten Simple_form-gem.

3
Cybergenie

Wenn Sie Formtastic verwenden und dieses Problem haben, können Sie die Sternchen entfernen, indem Sie die Konfigurationsdatei bearbeiten. Dies ist normalerweise app/config/initializers/formtastic.rb.

Ändern Sie diese Zeile: # Formtastic::SemanticFormBuilder.required_string = "(required)"

zu sein: Formtastic::SemanticFormBuilder.required_string = ""

Mehr Infos hier .

3
Aaron Gray

Abgesehen von der in der akzeptierten Antwort vorgeschlagenen globalen Konfiguration können Sie required: false als Eingabeoption oder defaults: { required: false } angeben, um sie für das gesamte Formular festzulegen.

2
inopinatus

sie können form_for verwenden und die Methode def label in config/initializer überschreiben, um Sternchen für Pflichtfelder wie folgt hinzuzufügen: 

def label(object_name, method, content_or_options = nil, options = nil, &block)
    if content_or_options.is_a?(Hash)

      content_or_options.each do |key, val|
        options[key] = val
      end

      content_or_options = method.to_s
    end

    content_or_options ||= method.to_s

    presence_validations = [ActiveModel::Validations::PresenceValidator, ActiveRecord::Validations::PresenceValidator]

    class_obj = options[:object].class if options[:object]
    class_obj ||= object_name.to_s.camelize.constantize

    validations = class_obj.validators_on(method.to_s).map(&:class)

    if (presence_validations.map { |pv| validations.include?(pv) }).any?
      content_or_options += "*"
    end

    Tags::Label.new(object_name, method, self, content_or_options, options).render(&block)
end

Diese Methode setzt ein Sternchen nach allen obligatorischen Feldern, wenn Sie den normalen form_for und validates_presence_of verwendet haben.

0
Mohamed Yakout

Ich habe herausgefunden, dass, wenn Sie nur das Sternchen (*) dahinter entfernen möchten, alles, was Sie tun müssen, ist, zu dieser Datei zu gehen file /config/locales/simple_form.en.yml

wieder einmal ist es keine gute Praxis, Ihre Konfigurationsdateien für Edelsteine ​​zu ändern und aus irgendeinem Grund etwas zu verwenden. Es ist immer eine Frage, warum Sie simple_form wirklich verwenden. 

Aber zum Beispiel habe ich das herausgefunden, weil simple_form großartige Dinge verwendet wird, aber heutzutage ist es eine bessere Usability, die Sternchen auf keinen erforderlichen Feldern zu haben.

0
andre.orvalho

Sie können es aus dem gesamten Formular entfernen:

<%= simple_form_for @form, defaults: { required: false } do |f| %>
0