2012-01-15 25 views
0

我有這個輸入字段:<%= f.text_field :skills %>,我想讓我的用戶列表達到5個技能(或單詞)。每個都以逗號分隔。用戶必須輸入在列表中以逗號分隔的技能

僅供參考,:技能目前只是我的用戶表中的一列。

我該如何做到這一點?我以某種方式想它首先需要將空格分隔爲單詞,對它們加以限制,然後用逗號將它們組合起來。

+0

不知道問題是什麼;如果用戶必須用逗號分隔輸入它,那麼這就是你想要存儲的方式,這有什麼問題?你問如何驗證它? – 2012-01-15 23:28:39

+0

是的,我想這個問題更多的是關於如何驗證它,並確保用戶以這種格式輸入它。 – 2012-01-16 00:27:57

+0

儘管我認爲人們在下面回答您的問題,但我會敦促您重新考慮您的設計。讓某人輸入5個逗號劃定的技能是很好的,但如果您創建技能表並讓用戶擁有其中的許多技能,則您可以利用更好的內置軌道功能。 – 2012-01-16 17:01:14

回答

0

要驗證它,在類中添加格式驗證測試怎麼辦?

class Test 
     validate :valid_skills_format? 

     def valid_skills_format? 
     if !(self.skills =~ /regex_for_5_words_separated_by_commas/) 
      self.errors.add(:skills, "wrong format") 
     end 
     end 
    end 

你也可以用拆分(',')來測試並檢查你是否有5個結果。

0

如果我理解正確的問題,這樣的事情應該給你你想要的東西:

class User < ActiveRecord::Base 
    attr_accessor :raw_skills 
    validate :five_or_fewer_skills? 


    def five_or_fewer_skills? 
    if unpacked_skills.size > 5 
     self.errors.add(:skills, "Too many skills!") 
    end 
    end 

    def unpacked_skills 
    skills.split(',') 
    end 

    def pack_skills(raw) 
    skills = raw.join(',') 
    end 
end 

然後,在你創建表單,你的「技能」字段更改爲「raw_skills」字段,並在創建過程就是pack_skills(raw_skills),這將使您的技能達到逗號序列化的值。然後你的驗證員將解壓技能,檢查他們的尺寸,你很好去!

相關問題