2017-04-12 5 views
1

Ich habe Projekte und Todos in ihnen, Todos haben Kontrollkästchen & Text, also wenn ich das Kontrollkästchen ändern, muss das ganze Modell ohne Schaltflächen aktualisiert werden.Ruby on Rails: Aktualisieren des Modells, wenn das Kontrollkästchen geändert wird

Hier ist mein Projekt auf Heroku: https://polar-scrubland-30279.herokuapp.com/

index.html.erb (Ich weiß, dass ich nicht der beste Code speller bin)

<% @projects.each do |project| %> 
    <div class="col-md-4"> 

    <div class="project"> 
     <%= form_for(local_assigns[:project] || project) do |f| %> 

     <div class="project-header"> 
      <h2> <%= f.object.title %> </h2> 
     </div> 

     <div class="project-todos"> 
      <%= f.fields_for(:todos) do |tf| %> 
      <div class="todo"> 
       <div class="todo--checkbox"> 
       <%= tf.check_box :isCompleted %> 
       </div> 
       <div class="todo--text"> 
       <%= tf.object.text %> 
       </div> 
      </div> 
      <% end %> 
     </div> 
     <% end %> 
    </div> 

    </div> 
<% end %> 

Das ist mein ProjectsController ist:

class ProjectsController < ApplicationController 

    def index 
    @projects = Project.all 
    end 

    def show 
    @project = Project.find(params[:id]) 
    end 

    def new 
    @project = Project.new 
    end 

    def create 
    @project = Project.new(project_params) 
    if @project.save 
     # ... 
    else 
     # ... 
    end 
    end 

    def update 
    if @project.update(project_params) 
     # ... 
    else 
     # ... 
    end 
    end 

    private 

    def set_project 
    @project = Project.find(params[:id]) 
    end 

    def project_params 
    params.require(:project).permit(:foo, :bar, todos_attributes: [:isCompleted, :text]) 
    end 

end 

project.rb

class Project < ActiveRecord::Base 
    has_many :todos 
    accepts_nested_attributes_for :todos 
end 

todo.rb

class Todo < ActiveRecord::Base 
    belongs_to :project 
end 

Die Frage ist: wie kann ich meine Form mit meinem Controller und ändern todo der Booleschen Variable verbinden, wenn Checkbox/uncheked geprüft. Ich habe einige Varianten ausprobiert, aber es gibt einen Refresh-Button, den ich nicht haben möchte.

GitHub - https://github.com/NanoBreaker/taskmanager

+0

Sie http verwenden: // api.jquery.com/jquery.ajax/ –

+0

Hier ist eine High-Level-Idee, haben eine Klasse diese Kontrollkästchen, in der Javascript einen Trigger für dieses Kontrollkästchen haben. Rufen Sie bei diesem Trigger ein API auf, um das Feld im Controller zu aktualisieren. – gates

+0

Sie müssen http://stackoverflow.com/questions/7031226/jquery-checkbox-change-and-click-event verwenden, um Chackbox Änderung Ereignis – andriy

Antwort

0

Sie haben jQuery checkbox change and click event verwenden Checkbox Änderungsereignis zu fangen,

weiter Sie Ajax-Request http://api.jquery.com/jquery.ajax/ auf dem Änderungsereignis,

in der Ajax-Request Verwendung

verwenden können Pfad zur Aktualisierung der Methode im Projekt-Controller.

Beachten Sie, dass Sie den Pfad in der Datei config/routes.rb zu setzen haben, etwas wie folgt aus:

Post 'url' => 'Projekte # update'

Verwandte Themen