使用initialize构建rails模型

时间:2014-01-18 15:38:05

标签: ruby-on-rails activerecord model

我有一个这样的模型:

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多个属性的模型时。

建立模型是否有最佳/更好的做法?上面的控制器代码是否应该实际存在于某个模型中?

2 个答案:

答案 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