我是 ROR 新手,目前在 Rails4 上工作。我在访问 attr_accessible 和 update_attributes 时遇到问题。如果选中该复选框,我想将布尔值更新为 true。这是我的代码
控制器.rb
class TasksController < ApplicationController
before_action :signed_in_user, only: [:edit, :new, :show, :destroy, :index]
def new
@task =current_user.tasks.new
end
def create
@task= current_user.tasks.new(params[:task].permit(:name, :taskname ))
if @task.save
redirect_to @task
else
render 'new'
end
end
def show
user = Task.find(params[:id]).user.id
if user == current_user.id
@task =current_user.tasks.find(params[:id])
else
flash[:notice] = "Access Denied "
redirect_to tasks_path
end
end
def index
@task=current_user.tasks.all
end
def edit
user = Task.find(params[:id]).user.id
if user == current_user.id
@task =current_user.tasks.find(params[:id])
else
flash[:notice] = "Access Denied "
redirect_to tasks_path
end
end
def update
@task = current_user.tasks.find(params[:id])
if @task.update(params[:task].permit(:name,:taskname))
redirect_to @task
else
render 'edit'
end
end
def destroy
@task = current_user.tasks.find(params[:id])
@task.destroy
redirect_to tasks_path
end
def done
@task = current_user.tasks.find(params[:id])
if @task.done
@task.update_attributes(completed: false)
else
@task.update_attributes(completed: true)
end
end
private
def signed_in_user
redirect_to new_user_registration_path, notice: "Please sign in." unless signed_in?
end
end
我在 Tasks#index 中收到 NoMethodError 错误
我在索引中的复选框代码如下:
index.html.erb
<h1>Listing tasks</h1>
<div id="new">
<%= link_to 'Add new task', new_task_path, class: "btn btn-primary" %>
</div><p>
<table class="PersonList">
<tr>
<th>TaskName</th>
<th>PersonName</th>
</tr>
<% @task.each do |task| %>
<tr>
<td class="checklist_check" ><%= check_box_tag "complete_task", task.id, task.done, :class => 'complete_task' %> <%= task.taskname%></td>
<td> <%= task.name %> </td>
<td><%= link_to 'Show', task_path(task) %></td>
<td><%= link_to 'Edit', edit_task_path(task) %></td>
<td><%= link_to 'Destroy', task_path(task), method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
我的js文件是:
任务.js
$(function(){
$(".complete_task").live("change", function(task_id) {
$.ajax({
url: "/tasks/done",
data: "id="+task_id,
success: function() { alert('completed') }
});
});
});
尽管提到了在控制器中完成的方法,但出现 NoMethod 错误的原因是什么?
我也正确地给出了我的路线。
我主要关心的是如何在 Rails4 和 update_attributes 中使用强大的参数来立即将布尔值从 true 更改为 false,反之亦然。
谢谢!!