我想在名为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
做这件事的干净方法是什么?
答案 0 :(得分:7)
我使用find_or_create_by
(see 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)