我正在构建一个简单的任务管理应用程序,并使用一个复选框来指示任务是否已完成。
以下是我提出的代码:
<%= check_box_tag "id", "id", task.done,
:onclick => remote_function(
:update => "task",
:url => { :action => :update, :controller => :tasks, :id => task.id },
:with => "'task[done]=true'",
:complete => "alert('hi')" ) %>
它会打印复选框,并根据task.done的状态自动检查它。但是当我触发onclick并观察日志时,会调用update方法,但不会在任务上更新完成的信息。
以下是任务控制器上的更新代码:
def update
@task = Task.find(params[:id])
@stream = Stream.find(@task.stream_id)
respond_to do |format|
if @task.update_attributes(params[:task])
format.html { redirect_to(@stream, :notice => 'Task was successfully updated.') }
format.json { head :ok }
else
format.html { render :action => "edit" }
format.json { render :json => @task.errors, :status => :unprocessable_entity }
end
end
end
为什么在任务记录中没有更新done = true?
非常感谢你们
答案 0 :(得分:1)
我要检查的两件事:
1)您是否在模型上有attr_accessible值?如果是这样,请确保包含您要更改的值。
2)您是否通过了该更新的验证?你可以尝试保存!作为测试,看看你是否得到了显式的rails验证错误。
答案 1 :(得分:1)
使用Rails 4的更新:不是查找attr_accessible
,而是查找控制器中的params.require
项。抓住了我!