2014-08-30 24 views
0

我有這樣對我的類枚舉:如何將所有枚舉選項轉換爲數組以便在下拉菜單的集合中使用?

class Post < ActiveRecord::Base 
    enum status: [ :unconfirmed, :corroborated, :confirmed ] 
end 

我現在用簡單的形式,我想產生我的表單部分的下拉菜單。

這是我現在有:

<%= simple_form_for(@post, html: {class: 'form-horizontal' }) do |f| %> 

    <%= f.error_notification %> 
    <%= f.input_field :parent_id, as: :hidden %> 

    <div class="field"> 
    <% if can? :manage, @post %> 
      <%= f.input_field :status, label: "Status", collection: Post.statuses, selected: Post.statuses[:corroborated] %>  
    <% end %>  
    </div> 

    <%= f.input :title, placeholder: "Enter Title" %> 
    <%= f.input :photo %> 
     <%= f.input :file %> 
    <%= f.input :body %> 
     <div class="report-submit"> 
      <%= f.button :submit %> 
     </div> 

<% end %> 

當我創建一個新的Post紀錄,我得到這個錯誤:

Completed 500 Internal Server Error in 20ms 

ArgumentError - '2' is not a valid status: 

當我在我的控制檯做Post.statuses,我得到這樣的:

> Post.statuses 
=> {"unconfirmed"=>0, "corroborated"=>1, "confirmed"=>2} 

我該怎麼做,我需要這個enum

回答

2

您需要使用enumkeys作爲namevalue集合。這意味着,你需要使用Post.statuses.keys爲集合:

<% statuses = Post.statuses %> 
<%= f.input_field :status, label: "Status", collection: statuses.keys, selected: :corroborated %> 
+0

啊......完美。這工作。但有一件事,我沒有辦法使用':selected'屬性的符號,而不是字符串? – marcamillion 2014-08-30 16:22:35

+0

你可以嘗試符號..不知道它..試一試 – RAJ 2014-08-30 16:23:24

+0

是的,完美的作品。非常感謝! – marcamillion 2014-08-30 16:29:00

0

爲了有一個選擇框,我認爲這樣的:

<%= f.input_field :status, label: "Status", collection: Post.statuses, selected: Post.statuses[:corroborated] %> 

需要改爲:

<%= f.select :status, options_for_select(Post.statuses.collect { |s| [s[0].humanize, s[0]] }, selected: Post.statuses[:corroborated])%> 

而且你可能想將對象的狀態選爲選項?像這樣:

<%= f.select :status, options_for_select(Post.statuses.collect { |s| [s[0].humanize, s[0]] }, selected: post.status)%> 
+0

我使用simple_form,所以也許這可能適用於普通的普通的香草Rails窗體...但它對我來說太冗長馬上。 RAJ的答案是完美的。 – marcamillion 2014-08-30 16:28:31

相關問題