代码之家  ›  专栏  ›  技术社区  ›  Hakan Ensari

formtastic中日期助手的默认值

  •  4
  • Hakan Ensari  · 技术社区  · 16 年前

    虽然听起来很基本,但我不能使日期助手默认为日期,如:

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

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

    如果你能告诉我我可能做错了什么,我会很感激的。

    5 回复  |  直到 15 年前
        1
  •  2
  •   Justin French    16 年前

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

        2
  •  7
  •   hgmnz    16 年前

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

    def edit
      @resource = Resource.find(params[:id])
      @resource.issued_on ||= Date.today
    end
    
        3
  •  2
  •   EmFi    16 年前

    您应该在模型中初始化之后定义。如果在模型中定义了after-initialize方法,则将其作为对新方法、创建方法、查找方法以及生成模型实例的任何其他方法的回调进行调用。

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

    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的记录,否则不应该发生这种情况。

        4
  •  0
  •   ForceMH    15 年前

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

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

    以上发布

    @issued_on ||= Date.today
    

    没有为我工作

        5
  •  0
  •   TerryS    15 年前

    我喜欢下面的方式

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

    稍长一点,但很好很清楚