7

关于如何在 Best In place 中使用 display_with 选项的文档并不多,但我试图让 Best_in_Place 以精简形式(mm/dd/yyyy)显示日期。我的数据库(sqlserver)以日期时间格式存储日期,我使用此命令显示该字段:

<%= 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

4 回答 4

5

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

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

这里的 ldt 是采用日期对象并转换为我想要的格式的方法。

希望能帮助到你

于 2013-01-15T14:39:51.240 回答
0

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

class Production
  def budget_approval_internal
    read_attribute(:budget_approval_internal).strftime("dd/mm/YY")
  end
end
于 2012-11-26T15:02:08.157 回答
0

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

module ActionView  
    class Base  
        def format_date(rec)  
            rec.strftime('%m/%d/%Y')  
        end  
    end  
end  
于 2012-11-26T09:39:00.630 回答
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。

于 2015-05-29T17:21:35.147 回答