如何缩短rails中的功能?

时间:2018-06-01 07:09:45

标签: ruby-on-rails ruby activerecord

我想在名为skill的MySQL表中插入skills

skills作为param[:skills] = "Lorem, Ipsum, Is, A, Dummy, Text"

我想将它们插入MySql DB。

我使用的方式是:

def skill_to_add
    skills = params[:skills].split(',')
    skills.each do |s|
        find_skill = Skill.find_by(:skill => s)
        if find_skill
            find_skill.update(:skill_count => find_skill.skill_count + 1)
        else
            Skill.create(:skill => s, :skill_count => 1) 
        end
    end
end

做这件事的干净方法是什么?

1 个答案:

答案 0 :(得分:7)

我使用find_or_create_bysee the docs):

skills.each do |skill_name|
  skill = Skill.find_or_create_by(skill: skill_name)
  skill.increment(:skill_count)
  skill.save
end  

注意:您需要将列设置为整数列,默认值为0,才能正常工作。

我还建议您将技能模型属性重命名为:

Skill
  -> name
  -> count

使用Skill.skill_count通常是多余的。

Sideote:在

skills = params[:skills].split(',')

你打算用名字创建空格技能,为什么?

skills = 'Lorem, Ipsum, Is, A, Dummy, Text'.split(',')
skills # => ['Lorem', ' Ipsum', ' Is', ' A', ' Dummy', ' Text']

我认为您希望strip分割值:

skills = params[:skills].split(',').map(&:strip)