Ruby on Rails:复选框更改时更新模型

Ruby on Rails: updating model when checkbox is changed

我在里面有项目和待办事项,待办事项有复选框和文本,所以当我更改复选框时,整个模型必须在没有任何按钮的情况下更新。

这是我在 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 %>

这是我的项目控制器:

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

问题是: 如何将我的表单与我的控制器连接,并在复选框为 checked/uncheked 时更改待办事项的布尔变量。我尝试了一些变体,但需要一个刷新按钮,我不想拥有它。

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

你必须使用 jQuery checkbox change and click event 捕捉复选框更改事件,

您还可以使用 ajax 请求 http://api.jquery.com/jquery.ajax/ 在更改事件上,

在 ajax 请求使用路径更新项目控制器中的方法。

注意路径要放在文件config/routes.rb, 像这样:

post 'url' => 'projects#update'