webentwicklung-frage-antwort-db.com.de

Wie erstelle ich eine Checkbox in Schienen?

Ich habe Checkboxen mit folgendem Rails-Formularhelfer erstellt:

<%= check_box("tag", tag.id) %>

Ich muss jedoch einige von ihnen standardmäßig prüfen lassen. In der Rails-Dokumentation ist nicht angegeben, wie dies ausgeführt wird. Gibt es einen Weg? Wie?

27
user1779563

Dies hat eine sehr unkomplizierte Lösung, die direkt von check_box unterstützt wird (zumindest bei Rails 4 habe ich keine ältere Dokumentation überprüft).

<%= check_box("tag", tag.id, {checked: true}) %>

Dadurch wird das Kontrollkästchen aktiviert. Anstelle von true wird natürlich eine Logik eingefügt, die bestimmt, ob jede von ihnen geprüft wird.

42
John Bachir

Wenn Sie das Kontrollkästchen in new aktivieren und in edit korrekt ausfüllen müssen, können Sie Folgendes tun: 

<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>

Wie gesagt hier

5
GEkk

Die Rails-Dokumente geben an, wie sie geprüft werden sollen, und dies hängt vom Objekt ab. Wenn Sie kein Instanzobjekt zur Verwendung mit check_box haben, ist die beste Option die Verwendung des check_box_tags wie erwähnt. Wenn ja, lesen Sie weiter.

Hier ist der Link zu den Dokumenten im check_box-Helfer. Im Prinzip funktioniert das so, dass Sie eine Instanzvariable definieren müssen. Diese Instanzvariable muss über eine Methode verfügen, die eine Ganzzahl oder einen Booleschen Wert zurückgibt. Aus den Dokumenten:

Dieses Objekt muss ein Instanzobjekt (@object) und keine lokale .__ sein. Objekt. Es ist beabsichtigt, dass die Methode eine ganze Zahl zurückgibt, und wenn dies der Fall ist Ganzzahl ist größer als Null, dann wird das Kontrollkästchen aktiviert.

Nehmen wir beispielsweise an, Sie haben eine @tag-Instanz in Ihrer Ansicht, die über eine aktivierte Methode verfügt. Das folgende Snippet bewirkt, dass das Kontrollkästchen aktiviert ist, wenn aktiviert ist, für das @tag-Objekt true ist, und deaktiviert, wenn es false ist. Um es standardmäßig zu aktivieren, setzen Sie das aktivierte Attribut in Ihrem Controller auf true. Die letzten beiden Variablen sind die Werte, die Sie mit dem Formular senden möchten, wenn das Kontrollkästchen aktiviert und deaktiviert ist.

<%= check_box "tag", "enabled", {}, "1", "0" %>

Oft wird der check_box-Helfer mit einem Formularersteller angezeigt. Wenn form_for für die @tag-Instanz verwendet wurde, würden Sie höchstwahrscheinlich dieses Snippet verwenden:

<%= f.check_box :enabled %>
4
Dan Polites

Mit check_box_tag anstelle von check_box kann festgelegt werden, dass es geprüft wurde.

2
user1779563

Keine Prüfung erforderlich: true für Rails> = 4.0 Schreiben Sie einfach

<%= check_box_tag "name", value, true %> # true or false
2
Govind shaw

Das Problem bei all diesen Lösungen ist, dass es mit dem params-Hash auf resubmits nicht gut funktioniert, also verwende ich im Moment so etwas, 

# ApplicationHelper
def resolve_boolean_parameter resource, attribute, options = {}
  default = options.delete(:default)
  return default unless params[:utf8]

  return params[resource][attribute] == "1"
end

und dann in der Ansicht:

<div><%= f.label :accepts_newsletter, "Receive Newsletters" %>
  <%= f.check_box :accepts_newsletter, :checked => resolve_boolean_parameter(:user, :accepts_newsletter, default: true)  %>
</div>
0
bbozo

Neue Funktion in Ihrem Helfer platziert

def check_if_true(item)
  ActiveModel::Type::Boolean.new.cast(item)
end

In deiner Sicht

<%= check_box("test", "active", {checked: check_if_true(@test.active) , :multiple => true, :style => "margin-left: 16px;"}, "true", "false") %>
0
FlyingV

Mit check_box_tag können Sie es auf true setzen, damit es bereits geprüft wird. Weitere Informationen hier: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

0
Marcelo Alves