0

我的模型中有一个字段用于创建日期,这不是从表单传递的,当前是在我的控制器的 create 方法中设置的。

这应该在我的模型中而不是在某种初始化方法中吗?如果是这样,该方法会是什么样子?

我还有其他字段要设置为默认值,每条记录都会创建,因此我试图找出可接受的标准放置位置。我开始认为它应该是模型,就好像模型曾经在控制器之外被调用过,它不会有所有这些逻辑。

4

2 回答 2

1

我通常创建构建器,从不直接使用标准 Rails 方法create

关键是将所有逻辑与特定案例等集中在一个地方......

基本上在控制器中,我最终以这种方式调用构建器:

@my_model_instance = MyModelBuilder.new(current_user, params[:my_model]).build

@my_model_instance = MyModelBuilder.new(current_user, params[:my_model]).create

我所有的建筑商都住在/app/builders


这是一个非常基本的例子:

class MyModelBuilder

  attr_accessor :params, :user, :my_model

  # consider using a Struct if you keep a very basic initializer
  def initialize(user, params)
    self.user = user
    self.params = params
  end

  def build
    my_model
  end

  def create
    my_model.tap{|m| m.save }
  end

  def my_model
    @my_model ||= MyModel.new(default_values.merge(params))
  end

  def default_values
    {
      foo: 'bar'
    }
  end
end
于 2013-05-11T15:25:57.960 回答
0

Rails 已经管理了记录的创建和更新日期。

如果您的模型有一个created_at字段或一个updated_at字段,它们将填写模型的创建和更新时间。

您可以在迁移中轻松生成这些字段,例如:

create_table :hello do
  t.timestamps
end

现在,对于默认值,您可以将它们填充到initialize模型的方法中:

def initialize(*args)
  self.field = default_value
  super(*args)
end
于 2013-05-11T15:29:11.610 回答