2012-01-17 41 views
3

但願這不是太複雜了..如何填充使用索引的rails simple_form選擇框?

所以我有一個屬性的手,我已經決定要存儲在數據庫中的索引,其指的是恆定在機型的機型:

class Profile < ActiveRecord::Base 
    STATUS_CHOICES = %w(single relationship married divorced complicated open) 
    etc... 

在我的形式,我現在這樣做的:

= f.simple_fields_for :profile do |p| 
    = dp.input :relationship_status, :required => true, :collection => Datingprofile::STATUS_CHOICES 

這顯示集合很好,但當然,需要從從模型來通過索引設置的值。我將如何設置集合上的值以對應於STATUS_CHOICES陣列的正確索引?

更新:去重新設計這使枚舉-ED attribs實際AD對象

回答

0

決定執行散列代替陣列的這個常數,這提供一個模型的簡單而不復雜處理索引..我將存儲哈希鍵並僅在視圖中使用這些值。

Whee !!

+0

你可以發佈你最終使用的代碼嗎? – ardochhigh 2013-07-06 15:04:02

+0

當然:https://gist.github.com/mbhnyc/5944282 – MBHNYC 2013-07-07 17:43:30

2

快速解決此問題的一種方法是使集合成爲選項元素值的枚舉索引,然後使用STATUS_CHOICES數組獲取標籤:label_method。

= f.simple_fields_for :profile do |p| 
    = dp.input :relationship_status, :required => true, :collection => 0..Datingprofile::STATUS_CHOICES.length, :label_method => lambda { |i| Datingprofile::STATUS_CHOICES[i] } 

參考文獻:

https://github.com/plataformatec/simple_form#collections https://github.com/plataformatec/simple_form/blob/master/test/inputs/collection_select_input_test.rb#L141

0

此行添加到您的應用程序的Gemfile:

gem 'enum_help' 

然後執行:

$ bundle 

在模型

class Profile < ActiveRecord::Base 
    enum relationship_status:{single: 0,relationship:1, married:2, divorced:3, complicated:4, open:5} 
    etc... 

在_form.html。ERB使用simple_form:

<%= f.input :relationship_status %> 

欲瞭解更多信息:https://github.com/zmbacker/enum_help

6

模式

某種恆定的散列:

HASH_NAME = { 
0 => "Choose:", 
1 => "On-Campus Recruiting - CSO",· 
2 => "CSO Staff Referral", 
3 => "Faculty Contact",· 
4 => "Career Day",· 
5 => "CSO Summer Job Listing",· 
6 => "Alumni Contact",· 
7 => "Personal Contact",· 
8 => "Other"· 
} 

- 視圖

<%= f.input :some_field, :collection => Model::HASH_NAME.sort.map {|k,v| [v,k]} %> 

這將輸出很好用select值作爲哈希鍵選擇,選擇名稱爲哈希值,比如:現在

<select id="form_application_job_source" class="select required" name="form_application[job_source]"> 
<option value="0">Choose:</option> 
<option value="1">On-Campus Recruiting - CSO</option> 
<option value="2">CSO Staff Referral</option> 
<option value="3">Faculty Contact</option> 
<option value="4">Career Day</option> 
<option value="5">CSO Summer Job Listing</option> 
<option value="6">Alumni Contact</option> 
<option selected="selected" value="7">Personal Contact</option> 
<option value="8">Other</option> 
</select> 

,如果您選擇了說 - 從下拉菜單中「校園招聘CSO」 ,將被存儲的值是:1

顯示它在視圖中爲「校園招聘 - CSO」你會在模型中自己創建一個小的返回功能,像這樣:

def return_paper_type 
    HASH_NAME[id] 
    end 

在視圖中,它會是這樣的:<%= @instancevariable.return_paper_type %>

+0

我在哪裏添加第一個哈希?在模型文件中? – Cybergenie 2015-02-04 13:16:34

+1

@Cyber​​genie是的,你必須在模型文件中添加散列。 – 2015-02-04 13:18:00

+0

感謝您的快速回復兄弟。我會發布我的結果,並喜歡upvote如果它的答案現在:) – Cybergenie 2015-02-04 13:19:02