我有一个这样的模型:
class Phrase < ActiveRecord::Base
attr_accessible :phrase, :emotion, :category
end
此模型对应于它的相应表格。每次我想创建一个新的Phrase
时,我都会在控制器中运行此代码:
Phrase.where(:phrase => values['phrase']).first_or_create do |phrase|
phrase.emotion = values['emotion']
phrase.category = values['category']
end
我觉得我应该在我的模型上使用initialize方法,或者在我的模型上创建一个新方法来构建它们。上面的方法看起来非常糟糕,特别是当我开始构建具有20多个属性的模型时。
建立模型是否有最佳/更好的做法?上面的控制器代码是否应该实际存在于某个模型中?
答案 0 :(得分:0)
由于您的模型允许通过attr_accessible
批量分配这些属性,因此您只需将哈希值传递给new
:
Phrase.new(values)
您还可以将find_or_create_by
与选项哈希一起使用:
Phrase.find_or_create_by_phrase(values[:phrase], values)
答案 1 :(得分:0)
def create
@phrase = Phrase.new(params[:phrase])
end
或者如果您使用的是强参数
def create
@phrase = Phrase.new(phrase_params)
end
private
def phrase_params
params.require(:phrase).permit(:phrase, :emotion, :category)
end
end