Wie verwenden Sie Active Record Enum Radio-Buttons in einem Formular?
In meine app, es ist ein Kommentar zu den Artikeln. Ich möchte den user die Möglichkeit haben zu kommentieren mit 3 verschiedenen Optionen. Um dies zu aktivieren, bin ich über eine Active Record-Enumeration. Bitte beachten Sie, dass die Kommentar-Abschnitte geschachtelt ist unter dem Artikel.
resources :articles, only: [:index, :show] do
resources :comments
end
Migration:
class AddEnumToCommentModel < ActiveRecord::Migration
def change
add_column :comments, :post_as, :integer, default: 0
end
end
Kommentar Modell:
enum post_as: %w(username, oneliner, anonymous)
Ich habe versucht, fügen Sie diese, um den Inhalt anzeigen, aber verloren. Ich vermute, dass ich auch etwas tun, mein controller aber nicht sicher.
Versucht anzeigen :
<%= form_for([@article, @comment]) do |f| %>
<% if @comment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@comment.errors.count, "error") %> prohibited this comment from being saved:</h2>
<ul>
<% @comment.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<h3>Fill in your comment</h3>
<%= f.label :content %><br>
<%= f.text_area :content %>
</div>
<div class="post_as">
<h3> Choose how you want to post your comment :</h3>
<%= f.input :content, post_as: ???, as: :radio %>
</div>
<br>
<div class="actions">
<%= f.submit %>
</div>
<br>
<% end %>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rails erstellt eine Klasse Methode mit der pluralisiert Attribut-Namen, wenn Sie enum verwenden. Die Methode gibt eine Schlüssel-Wert-paar-strings, die Sie definiert haben, und was die ganzen zahlen, die Sie anzeigen zu können. Also, Sie könnten so etwas tun:
In der Ansicht statt
haben, könnten Sie
Quelle: http://guides.rubyonrails.org/form_helpers.html#radio-buttons
Gibt es auch collection_radio_buttons, die ist kürzer als die anderen Optionen.
Den letzten zwei Argumente angeben, wie man den input-Wert und den label-text. In deinem Beispiel
Comment.post_as
erzeugt einen hash-Wert einer enum-Schlüssel-Namen, um die darunter liegende ganze Zahl, so dass wir ergreifen können mit:second
für die integer-und:first
für den Namen — ganz einfach!Hier ist, was das bringt:
Du kannst auch das HTML, indem ein block, das ist meine bevorzugte Art zu erstellen enum radio-buttons mit klickbaren labels:
Zusätzlich zu xxyyxx ist Antwort, falls Sie möchten, dass die Etiketten werden als anklickbare gut: