我是ROR的新手,目前在Rails4上工作。我在访问attr_accessible和update_attributes时遇到问题。如果选中该复选框,我想将布尔值更新为true。 这是我的代码
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错误索引中的复选框代码如下:
<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文件是:
$(function(){
$(".complete_task").live("change", function(task_id) {
$.ajax({
url: "/tasks/done",
data: "id="+task_id,
success: function() { alert('completed') }
});
});
});
除了提到在控制器中完成的方法之外,获得NoMethod错误的原因是什么。
我也正确地给了我的路线。
我主要关心的是如何在Rails4和update_attributes中使用强参数,以便boolean将表单true更改为false,反之亦然。
谢谢!
答案 0 :(得分:0)
你必须像这样使用它
@task.update_attribute :completed, false
答案 1 :(得分:0)
应该是
def done
@task = current_user.tasks.find(params[:id])
@task.update_attributes(completed: true)
end
或者
def done
@task = current_user.tasks.find(params[:id])
@task.update_attribute(:completed, true)
end
您的复选框应该像
<% if task.completed == true %>
<%= check_box_tag "complete_task", task.id, true, :class => 'complete_task' %>
<% else %>
<%= check_box_tag "complete_task", task.id, true, :class => 'not_complete_task' %>
<% end %>
$(function(){
$(".complete_task").live("change", function(task_id) {
$.ajax({
url: "/tasks/done",
data: "id="+task_id,
success: function() {$(this).css({}); } #style for strike out
});
});
});