Was ist der einfachste Weg, ein ganzzahliges Attribut mit einer begrenzten Anzahl gültiger Werte als Optionsfelder darzustellen?

Wie kann ich den Formhelper verwenden, um dies zu erreichen? Ich sehe nur Beispiele, die Zeichenfolgenwerte verwenden.

-1
whatever0010011 30 Dez. 2015 im 18:22

3 Antworten

Beste Antwort

Du kannst es versuchen

   <%= form_for :model do |f| %>
    <% 1.upto(10) do |i| %>
      <%= f.radio_button :integer, i %> #integer is the model field
    <% end %> 
   <% end %>

Oder

<%= form_tag do %>
<% 1.upto(10) do |i| %>
  <%= radio_button_tag :name, i %>
<% end %>
<% end %>
4
Rajarshi Das 30 Dez. 2015 im 15:37

Etwas wie:

<% (1..10).each do |value| %>
  <%= f.radio_button_tag(:method_name, value) %>
<% end %>

Wobei (1..10) als Konstante in das Modell gehören könnte. Was erleichtert auch die Validierung:

# in the model
FOOS = (1..10)
validates :foo, inclusion: { in: FOOS }

# in the view
<% Model::FOOS.each do |values| %>
  <%= f.radio_button_tag(:foo, value) %>
<% end %>
1
spickermann 30 Dez. 2015 im 15:27

Mein Weg ist es, eine Aufzählung in Ihrem Modell zu verwenden. Zum Beispiel wird das Rollenfeld als Nummer 0 gespeichert, wenn die Rolle Investor ist, Nummer 1, wenn die Rolle in meinem Beispiel Händler ist.

Sie müssen Ihre Aufzählung in Ihrer .rb-Modelldatei wie folgt deklarieren:

enum role: [:investor,:trader]

Dann in der Ansichtsdatei:

 <%= f.radio_button :role, :investor , class: 'form-control underlined' %>
 <%= label :role_investor, 'I wanna be an investor' %>
 <%= f.radio_button :role, :trader  , class: 'form-control underlined' %>
 <%= label :role_trader, 'I wanna be a trader' %>
0
Tánh 18 Jän. 2019 im 08:55