2017-12-27 2 views
0

Ich habe ein Modellprojekt und ein Modell ProjectLine. Project hat verschachtelte Attribute für ProjectLine.Rails-Schaltfläche zum Aktualisieren des Status verschachtelter Attribute

In meiner Projektansicht zeige ich Projektinfo mit einer Liste von Aufgaben auf.

<% @project.project_lines.each do |project_line| %> 

<%= project_line.user.name %> 
<%= project_line.description %> 
<%= number_to_currency project_line.amount, precision: 0, unit: "USD ", separator: ",", delimiter: "," %> 
<%= project_line.task_status_name %> 

<% end %> 

Aufgaben werden auf Projektformular mit Cocoon erstellt.

In der obigen Ansicht, nach Statusname, würde ich gerne eine Schaltfläche für jede Projektlinie haben, die den Status ändert.

Die Lösung, die ich bisher gefunden habe, ist ein Formular zu erstellen.

<%= semantic_form_for @project_line do |f| %> 

    <%= f.hidden_field :status, :value=>2 %> 
    <%= f.submit 'ACCEPT', class: 'btn btn-primary btn-md' %> 

<% end %> 

Ich versuchte es auf einem Teil an Projekten zu platzieren und auf der Schleife aufrufen <% @project.project_lines.each do |project_line| %>, aber ich kann es nicht die Arbeit.

Wie kann ich eine Schaltfläche für jede Projektlinie erhalten, um den Status der Projektlinie zu ändern?

+0

Richten Sie das Formular vielleicht remote auf eine Controller-Aktion aus und übergeben Sie ihm die erforderliche ID, um den Status zu ändern. Aktualisieren Sie Ihre Ansicht mit Ajax. –

+0

Danke für Ihren Kommentar. Können Sie ein Codebeispiel bereitstellen? – Catmal

Antwort

0

Wenn ich Ihre Anfrage, somthing entlang der Linien von

Ansicht verstehen

<% @project.project_lines.each do |project_line| %> 

    <%= project_line.user.name %> 
    <%= project_line.description %> 
    <%= number_to_currency project_line.amount, precision: 0, unit: "USD ", separator: ",", delimiter: "," %> 
    <%= project_line.task_status_name %> 
    <button class="accept_to_server">Accept</button> 
<% end %> 

Javascript (jQuery)

$.('.accept_to_server').on('click', function(){ 
    $.ajax({ 
    url: 'path/to/accept/route' 
    method: 'PUT' // or what method your route uses 
    data: {data:you, need:here} 
    }).done(function(data){ 
    // update your view 
    }).fail(function(){ 
    // something went wrong 
    }); 
}; 

Hope this aushilft.

Verwandte Themen