Ruby on rails 未找到辅助对象的最佳就地显示

Ruby on rails 未找到辅助对象的最佳就地显示,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,best-in-place,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,Best In Place,关于如何使用display_with选项in Best-in-place,没有太多文档,但我正在尝试让Best_-in-place以压缩格式(mm/dd/yyyy)显示日期。 My db(sqlserver)以datetime格式存储日期,我使用此命令显示字段: <%= best_in_place(@production, :budget_approval_internal, type: :date, :nil => "[Not set]") %> 所以我想我可以使

关于如何使用display_with选项in Best-in-place,没有太多文档,但我正在尝试让Best_-in-place以压缩格式(mm/dd/yyyy)显示日期。 My db(sqlserver)以datetime格式存储日期,我使用此命令显示字段:

<%= best_in_place(@production, :budget_approval_internal,  type: :date, :nil => "[Not    set]")  %>
所以我想我可以使用: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\u date,:nil=>“[未设置]”)”%>
但我说的是一个错误:


“找不到帮助程序格式\u日期。有什么想法吗?

您应该
在控制器中包含ApplicationHelper
,或者将该方法添加到相应的帮助程序文件中。
编辑:您需要打开ActionView::基类并添加您的方法

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

也许您可以覆盖生产模型的
预算批准\u内部
的setter方法。这不是最佳解决方案,但如果您仅在该模型中使用最佳位置,则该方法可以

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

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

在这里,ldt是一种方法,它接受一个日期对象并将其转换为我想要的格式


希望它有帮助

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

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

然后将
format\u date
方法放入模型中。删除参数并按如下方式重写该方法:

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

无需与ApplicationHelper混为一谈。

不,我相信ApplicationHelper会自动包含在所有控制器中,但无论如何它都没有帮助。有趣的是,如果我只是将其放入视图中,它工作正常。我不确定format\u date应该如何从中获取参数:display\u with,但我假设这是最好的方法的一部分_in_place magic。它似乎只接受来自ActionView模块的帮助程序。在lib/best_in_place/helper.rb中有一个复选框
ViewHelpers.response_to?(选择[:display_with])
。ViewHelpers是这样创建的:
BestInPlace::ViewHelpers=ActionView::Base。新的
那么有没有办法将此函数以某种方式混合到ActionView模块中?好主意。尝试将其添加到ApplicationHelper模块之后:
模块ActionView类Base def format\u date(rec)rec.strftime(“%m/%d/%Y”)end
我想到了这一点,但它并没有真正解决我为什么不能显示的问题:display_with to work。在我必须处理的模型中,我有大约30个日期字段,似乎有很多不必要的代码。
def format_date
   self.my_date.strftime('%m/%d/%Y')
end