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

时间:2017-04-12 11:42:52

标签: ruby-on-rails ruby model-view-controller checkbox models

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

这是关于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

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

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

1 个答案:

答案 0 :(得分:0)

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

您还可以使用ajax请求    关于变更事件的http://api.jquery.com/jquery.ajax/

在ajax请求中使用path来更新Projects控制器中的方法。

请注意,您必须将路径放在文件config / routes.rb中, 像这样的东西:

发布'url'=&gt; '项目#更新'