2016-10-23 7 views
0

ich Task-Modell bin mit, die drei Felder hat: title:string, completed:boolean, priority:integerKonvertieren von Integer-Typ zu bespannen Schienen

Ich möchte ganzzahlige Werte zu transformieren (1,2,3) auf String-Werte (Next, Now , Später) in der Priorität.

ich Modell schrieb:

class Task < ApplicationRecord 
    belongs_to :user 
    PRIORITIES = [ 
     ['Later', 1], 
     ['Next', 2], 
     ['Now',3] 
    ] 

Und auch in Form:

= f.input :priority, Task::PRIORITIES 

Alles sollte funktionieren, aber ich erhalte eine Fehlermeldung:

No implicit conversion of Symbol into Integer in this line

Wie kann ich das beheben es?

+0

Ich denke, Sie können 'f.select: Priorität, Aufgabe :: PRIORITIES' – Nikhil

Antwort

1

Versuchen enums für diese Verwendung, wie diese

class Task < ApplicationRecord 
    belongs_to :user 
    enum priority: { later: 1, next: 2, now: 3} 
end 
+0

Wie soll ich mein Formular danach ändern? Es funktioniert, aber ich brauche ein Dropdown-Menü in meiner einfachen Form –

+0

Ok, endlich habe ich es getan. Vielen Dank :) –

+0

Entschuldigung, ich habe Ihren ersten Kommentar verpasst, ich bin froh, dass Sie es geschafft haben. –

0

um ein Dropdown-Menü mit einer Enum zu erstellen, können Sie so etwas wie dieses benötigen:

<%= f.select :priority, Effort.priorities.keys.map { |priority| [priority.titleize, priority] }, {prompt: true}, {class: "dropdown-select-field"} %>

Als Bonus enum für die Verwendung, Sie können zum Beispiel anrufen:

Task.low auf der Klasse, oder task.next? für eine Instanz.

Verwandte Themen