2

ich eine Batch-Aktion in activeadmin verwende ist ein Formular und Code zum AnzeigenActiveadmin Stapelaktion Caching Abfrageer

batch_action 'Assign something', form: { 
     abc: Abc.order('name ASC').map{|s| [s.name, s.id]}.uniq 
    } do |ids, inputs| 
    ids.each do |id| 
     job = Job.find(id) 
     # does something here 
    end 
    redirect_to :back, notice: "Congrats!!" 
    end 

Dieser Code erzeugt perfekte Form, aber in dieser Form Dropdown hat Werte im Cache erzeugt. Das heißt, wenn wir Namen eines beliebigen Abc Datensatzes ändern, wird seine Änderung auch nach dem Aktualisieren der Seite nicht in der Form wiedergegeben.

Form has following options 

<option value="6">Bla</option> 
<option value="7">Alliance</option> 

Nach der Bearbeitung Wert Bla von Foo noch in DB unseres Formular zeigt altes Ergebnis. Obwohl der Wert in db geändert wurde.

After editing records. Though Bla should be changed to Foo now 
<option value="6">Bla</option> 
<option value="7">Alliance</option> 

Jede Idee, wo ich falsch gehe?

Antwort

2

Entsprechend dieser doc, dynamische Formulare benötigen ein Proc.

batch_action ('Assign something', form: ->{ { 
    abc: Abc.order('name ASC').map{|s| [s.name, s.id]}.uniq 
} }) do |ids, inputs| 
ids.each do |id| 
    job = Job.find(id) 
    # does something here 
end 
redirect_to :back, notice: "Congrats!!" 

Ende

Ich denke, der Block als Argument und der Block nach dem Funktionsaufruf übergeben ist weniger verwirrend ist (leicht) mit den () um die Argumente. Sie sind nicht erforderlich.