5

Es gibt nicht viel Dokumentation, wie die Option display_with in Best In Place zu verwenden, aber ich versuche, Best_in_Place zu erhalten, um Daten in verdichteter Form anzuzeigen, (MM/TT/JJJJ). My db (SQLServer) hat die in Datetime-Format gespeicherten Daten, und ich verwende diesen Befehl, um das Feld anzuzeigen:Best_in_place display_with nicht finden helper

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

Wenn das Juwel geklickt funktioniert wie erwartet, ein Kalender-Steuerelement des Aufstellen das Datum auszuwählen, und dann in Kurzform anzeigen. Aber wenn ich refresh drücken erhalte ich ein Datum, das wie folgt aussieht:

2013-12-04 00:00:00 UTC  

Also dachte ich, ich verwenden könnte: display_with Option Gebrauch einen Helfer zu haben, die wie folgt aussieht:

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

ich diese setzen im application_helper.rb Modul und dann versucht, dies:

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

aber ich einen Fehler in den Worten:

"kann das Hilfsprogramm format_date nicht finden. Irgendwelche Ideen?

Antwort

0

Entweder Sie sollten include ApplicationHelper in Ihrem Controller oder fügen Sie die Methode zur entsprechenden Hilfsdatei hinzu.
Edit: Sie müssen die ActionView :: Basisklasse öffnen und Ihre Methode

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

Nein, ich glaube, ApplicationHelper ist automatisch in allen Controllern enthalten, aber auf jeden Fall hat es nicht geholfen. Interessanterweise, wenn ich einfach <% = format_date (@ production.budget_approval_internal)%> in die Ansicht lege, funktioniert es gut.Ich bin mir nicht sicher, wie format_date den Parameter von display_with bekommen soll, aber ich gehe davon aus, dass das Teil der best_in_place Magie ist. – user1023110

+0

Es scheint, dass es nur Helfer aus dem ActionView-Modul akzeptiert. In lib/best_in_place/helper.rb gibt es einen Haken bei 'ViewHelpers.respand_to? (Opts [: display_with])'. Und der ViewHelpers wird wie folgt erstellt: 'BestInPlace :: ViewHelpers = ActionView :: Base.new' – Sebi

+0

Also gibt es eine Möglichkeit, diese Funktion irgendwie in das ActionView-Modul einzufügen? – user1023110

0

Vielleicht hinzufügen können Sie die Setter-Methode für budget_approval_internal Ihr Serienmodell außer Kraft setzen. Dies ist nicht die beste Lösung, aber wenn Sie in diesem Modell nur best_in_place verwenden, dann ist es in Ordnung.

+0

Ich dachte daran, aber es ist nicht wirklich das Problem, warum ich nicht: display_with arbeiten kann. Ich habe ungefähr 30 Datumsfelder in dem Modell, mit dem ich mich befassen müsste, und es sieht nach viel unnötigem Code aus. – user1023110

3

Ich lief das gleiche Problem und verwendet ein kleines Snippet von den Pull-Anforderungen von best_in_place von Zubin getan.

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

hier die LDT ist die Methode, die ein Datum Objekt nimmt und konvertiert in das Format der mein Wunsch.

Hoffe, es hilft

+1

Sie sind ein Genie –

0

Ich lief in ein ähnliches Problem selbst gerade. Für eine einfache Formatierungsmethode wie Sie, sollten Sie einfach :display_as anstelle von :display_with verwenden.

Ihr b_i_p Code in der Ansicht würde :display_as => format_date verwenden.

Dann setzen Sie die format_date Methode in Ihrem Modell. Entfernen Sie das Argument und schreiben Sie die Methode wie folgt um:

Keine Notwendigkeit, mit ApplicationHelper herumzualbern.