4

听起来很基本,我不能将 date_helper 默认设置为日期,如下所示:

- semantic_form_for resource do |f|
  - f.inputs do
    = f.input :issued_on, :default => Date.today
  = f.buttons

如果资源没有日期,则上述内容仅呈现空白列。

将不胜感激任何关于我可能做错了什么的指针。

4

5 回答 5

7

您可以在控制器上设置对象本身的默认值

def edit
  @resource = Resource.find(params[:id])
  @resource.issued_on ||= Date.today
end
于 2009-11-11T15:21:27.893 回答
2

您应该在模型中定义 after_initialize。如果在你的模型中定义了 after_initialize 方法,它会被调用为对 new、create、find 和任何其他生成模型实例的方法的回调。

理想情况下,您希望像这样定义它:

class resource < ActiveRecord::Base

  def after_initialize
    @issued_on ||= Date.today
  end
  ...
end

然后您的视图将如下所示:

- semantic_form_for resource do |f|
  - f.inputs do
    = f.input :issued_on
  = f.buttons

如果您发现没有设置这些字段的记录,这也将防止出现零错误。但是,除非您在没有 ActiveRecord 的情况下直接创建记录,否则不应发生这种情况。

于 2009-11-11T17:24:13.530 回答
2

我们最近针对 Formtastic 中的所有 :select、:radio 和 :check_boxes 输入实现了 :selected 选项,因此它将在下一个补丁版本 (0.9.5) 或 1.0 中提供。在那之前,创建 after_initialize 或在控制器中设置默认值的建议是很好的建议,但我确实认为有时决定默认值的最佳人选是设计者,他可能对控制器或模型不满意,这就是我们将其添加为 Formtastic DSL 的一部分的原因。

于 2009-12-01T10:49:09.637 回答
0

我喜欢下面的方式

after_initialize :set_issued_on

def set_issued_on
  @issued_on||=Date.today
end

有点长,但又好又清晰

于 2011-09-07T14:39:44.533 回答
0

您可以在模型文件中添加以下内容

def after_initialize
    self.start ||= Date.today
    self.token ||= SecureRandom.hex(4)
    self.active ||= true
end

以上发出

@issued_on ||= Date.today

对我没用

于 2011-02-09T09:35:20.547 回答