2016-09-08 1 views
0

ich eine ziemlich Standard-Rails-Anwendung mit einer Standard-Form etwas wie dieses:Kamel Fall Etiketten auf f.submit Form Tasten

<%= simple_form_for @foo_bar do |f| %> 
    <%= f.input :some_fields %> 
    <%= f.submit %> 
<% end %> 

Es ausgenommen wie erwartet funktioniert, dass die Etiketten auf den Tasten am Ende

<input type="submit" name="commit" value="Update Foo bar"> 

oder

<input type="submit" name="commit" value="Create Foo bar"> 

das Problem, das ich habe, ist die 'Foo Bar'. Ich weiß, dass es ein Camel Case Model Klassennamen Problem ist. Ich weiß auch, kann ich so etwas wie:

<input type="submit" name="commit" value="<%= action_name == 'new' ? 'Create' : 'Update' %> Foo"> 

oder

<%= f.submit "#{action_name == 'new' ? 'Create' : 'Update'} Foo Bar" %> 

Aber nur fragen, ob es eine elegantere Methode war ich fehlte?

+0

Warum verwenden Sie nicht CSS? http://www.w3schools.com/cssref/pr_text_text-transform.asp – fanta

Antwort

1

Sie können Parameter senden, wenn Sie mit diesem Formular partiell rendern.

new.html.erb

<%= render 'form', button: 'Create' %> 

edit.html.erb

<%= render 'form', button: 'Update' %> 

_form.htm.erb

<%= simple_form_for @foo_bar do |f| %> 
    <%= f.input :some_fields %> 
    <%= f.submit "#{button} Foo Bar" %> 
<% end %> 
+0

Ich könnte das tun, aber das hat dann benutzerdefinierten Code in 3 Dateien vs die nur in der fmit –

+1

was Sie wollen, aber mein Beispiel wird empfohlen in Schienen –

+0

vereinbart. Das Modell für solche Dinge ist, dass es eine Ansicht für edit.html.erb gibt, eine für new.html.erb und beide teilen die tatsächlichen Formularelemente in _form.html.erb. In den ersten beiden Ansichten wird das Formular selbst eingezogen, indem es als Teil dargestellt wird. Unterschiede im Verhalten werden durch Werte ausgelöst, die in das gerenderte Partial übergeben werden. – jaydel

1

Ich hatte das gleiche genaue Problem und es ist viel einfacher zu beheben, als Sie denken;

Für f.submit Tasten können Sie einfach tun:

<%= f.submit "Create Foo Bar" %> 

Oder Sie können versuchen, diese:

<%= f.submit "create foo bar".titleize %> 

Und für Etiketten können Sie tun:

<%= f.label :create_foo_bar, "Create Foo Bar" %> 

Das erste Argument ist nicht der Titel, wie die meisten Leute denken. Rails erwartet, dass das erste Argument der Objektname ist und es automatisch zum Titel macht, wenn Sie kein zweites Argument (Option) mit dem echten Titel übergeben.

+0

Ich bekomme das, aber ich denke, um zu klären, dass ich hoffe, dass es einen Weg geben könnte, 'Foo Bar' oder 'Bar' einfach in die Submit zu geben und je nach Aktion das 'Update' oder 'Create' hinzuzufügen. –

+1

Oh sorry, ja in diesem Fall denke ich, dass die Aussage, die du sonst noch gemacht hast, ziemlich gut ist. Sie können auch die? : Anweisung in Ihrer application_helper.rb in einer Methode und rufen Sie dann einfach die Methode in der Ansicht statt der gesamten if else-Anweisung ... auf diese Weise ist der Code in der Ansicht ein wenig sauberer. – luissimo

+0

Ich dachte das gleiche ... Ich vermute, das ist nur eine Eigenart von Rails und nicht viel herum. Ich denke, ich könnte eine Klasse "Bar