2013-04-03 4 views
5

Ich habe mich gefragt, warum wir eine nil hinzufügen, wenn :class => "class_name" setzenRuby on Rails: Putting-Klasse mit submit_tag

<%= submit_tag nil, :class => "class_name" %> 

aber dafür:

<%= f.submit class: "class-Name" %> 

Ich brauche nicht das hinzufügen nil

Dank

Antwort

-1

offensichtliche Antwort ist, Das submit_tag und submit sind einfach verschiedene Form Helper-Methoden, die verschiedene Argumente annimmt.

1

Weil sie zwei verschiedene Methoden ...

Die „Eintragen“ Methode nicht eine Beschriftung nicht nehmen, weil es einen aus der Form entnehmen kann, dass die Methode aufgerufen wird, und welcher Gegenstand verwendet wurde, zu bauen die Form.

Die Methode "submit_tag" wird für ein Formularobjekt nicht aufgerufen. Es wird für die benutzerdefinierte Formularerstellung verwendet (z. B. mehr von Ihrem ActiveRecord-Modell getrennt). Daher kann der Code keine Beschriftung ableiten und muss einen Wert als erstes Argument erhalten. Alle "formelement_tag" -Methoden (zum Beispiel dokumentiert here) sind so und können weniger auf Ihr Datenmodell schließen.

8

Ein Blick auf die way that submit_tag method was implemented klar beantwortet Ihre Frage.

def submit_tag(value = "Save changes", options = {}) 
    options = options.stringify_keys 

    if disable_with = options.delete("disable_with") 
     options["data-disable-with"] = disable_with 
    end 

    if confirm = options.delete("confirm") 
     options["data-confirm"] = confirm 
    end 

    tag :input, { "type" => "submit", "name" => "commit", "value" => value }.update(options) 
    end 

Es nimmt zwei Argumente, die erste ist value standardmäßig die „Änderungen speichern“ und das zweite ist ein Hash der Optionen ist. Wenn Sie nil nicht übergeben, wird angenommen, dass dies der Wert ist, den Sie für die Eingabe wünschen.

0

Die _tag-Reihe von Methoden erfordert normalerweise einen name-Parameter (andernfalls wären sie ziemlich nutzlose Tags, also ist es immer das erste Argument anstelle eines Teils des Hash. Weil der Submit-Helfer als Teil des Formulars aufgerufen wird, Rails kann davon ausgehen, Namen Eigenschaft des Feldes und kann dann die Optionen machen das erste Argument Hash

7
 <%= submit_tag("Update", :id=>"button", :class=>"Test", :name=>"submit") %> 

erster Parameter ist erforderlich, und es würde Wert sein, und sie jeden Parameter Sie angeben möchten, kann wie in einem Hash erfolgen.: Taste => "Wert".