formtastic中date_helper的默认值

时间:2009-11-11 14:39:00

标签: ruby-on-rails formtastic

基本听起来,我不能将date_helper默认为日期,如:

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

如果资源没有日期,上面只会呈现空白列。

对任何我可能做错的指针表示赞赏。

5 个答案:

答案 0 :(得分:7)

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

def edit
  @resource = Resource.find(params[:id])
  @resource.issued_on ||= Date.today
end

答案 1 :(得分: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

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

答案 2 :(得分:2)

我们最近在Formtastic中实现了针对all:select,:radio和:check_boxes输入的选择选项,因此它将在下一个补丁版本(0.9.5)或1.0中。在此之前,创建after_initialize或在控制器中设置默认值的建议是很好的建议,但我认为有时候决定默认值的最佳人选是 designer ,他们可能不会对控制器或模型感到舒适,这就是我们将其作为Formtastic DSL的一部分添加的原因。

答案 3 :(得分:0)

您可以将以下内容放入模型文件中

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

以上发布的

@issued_on ||= Date.today

对我不起作用

答案 4 :(得分:0)

我喜欢以下方式

after_initialize :set_issued_on

def set_issued_on
  @issued_on||=Date.today
end

比较长,但又漂亮又清晰