2017-04-12 80 views
1

我得到了內部項目和待辦事項,待辦事項有複選框&文本,所以當我更改複選框時,必須更新整個模型而不用任何按鈕。Ruby on Rails:當更改複選框時更新模型

這是我在Heroku上的項目:https://polar-scrubland-30279.herokuapp.com/

index.html.erb(我知道我不是最好的代碼拼寫)

<% @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 %> 

這是我ProjectsController:

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 

的問題是:我怎麼連我的形式與我的控制器,以及改變待辦事項的布爾變量時複選框被選中/ uncheked。我嘗試了一些變體,但是需要一個刷新按鈕,我不想這樣做。

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

+0

你可以使用http:// api.jquery.com/jquery.ajax/ –

+0

這裏是一個高層次的想法,有一個類的複選框,在JavaScript中有一個觸發器的複選框。在該觸發器上,調用api更新控制器中的字段。 – gates

+0

你必須使用 http://stackoverflow.com/questions/7031226/jquery-checkbox-change-and-click-event 捕捉chackbox更改事件 – andriy

回答