关于如何在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。有什么想法?
答案 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。