Best_in_place display_with not find helper

时间:2012-11-26 09:01:41

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 best-in-place

关于如何在Best in Place中使用display_with选项的文档并不多,但我试图让Best_in_Place以浓缩形式显示日期,(mm / dd / yyyy)。 我的db(sqlserver)具有以datetime格式存储的日期,我使用此命令显示该字段:

<%= best_in_place(@production, :budget_approval_internal,  type: :date, :nil => "[Not    set]")  %>

单击时,gem按预期工作,设置日历控件以选择日期,然后以简短形式显示。但是当我按下刷新时,我会看到一个类似的日期:

 2013-12-04 00:00:00 UTC    

所以我想我可以使用:display_with选项来使用看起来像这样的帮助器:

def format_date(my_date)
   my_date.strftime('%m/%d/%Y')
end

我把它放在application_helper.rb模块中,然后尝试了这个:

 <%= best_in_place(@production, :budget_approval_internal,  type: :date, :display_with => :format_date, :nil => "[Not    set]")  %>

但是我说错误:

“找不到帮手format_date。有什么想法?

4 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,并使用了zubin完成的best_in_place拉取请求的小片段。

  

<%= in_place_edit(@term, :starts_on, display_with: lambda { |dt| ldt(dt) }, html_attrs: {datepicker: "true"}) %>

这里的ldt是一个获取日期对象并转换为我想要的格式的方法。

希望有所帮助

答案 1 :(得分:0)

您应该在控制器中include ApplicationHelper或将方法添加到相应的帮助文件中 编辑:您需要打开ActionView :: Base类并添加方法

module ActionView  
    class Base  
        def format_date(rec)  
            rec.strftime('%m/%d/%Y')  
        end  
    end  
end  

答案 2 :(得分:0)

也许您可以覆盖生产模型的budget_approval_internal的setter方法。这不是最佳解决方案,但如果您在此模型中使用best_in_place,那么就可以了。

class Production
  def budget_approval_internal
    read_attribute(:budget_approval_internal).strftime("dd/mm/YY")
  end
end

答案 3 :(得分:0)

我自己也遇到过类似的问题。对于像您这样的简单格式化方法,您应该使用:display_as而不是:display_with

视图中的b_i_p代码将使用:display_as => format_date

然后将format_date方法放入模型中。删除参数并重写方法如下:

def format_date
   self.my_date.strftime('%m/%d/%Y')
end

无需使用ApplicationHelper。