我是rails的新手,我认为这是一个非常简单的问题。
我有一个“任务”列表。当您单击某个任务时,我想更新其在数据库中的行以将其标记为完成(将“状态”列从0更改为1)。
以下是我的视图中的链接:
<td><%= link_to t.name, change_task_status_path(:id => t.id) %>
以下是我的tasks_controller.rb中的内容:
def change_task_status
@t = Task.find_by_id(params[:id])
@t.status = '1' # 1 = complete
@t.save
render :nothing => true
end
我无法弄清楚如何正确格式化链接!加载视图时出现此错误:
undefined method `change_task_status_path' for #<#<Class:0x3a6c144>:0x3a69d54>
修改 rake路线显示:
tasks GET /tasks(.:format) tasks#index
POST /tasks(.:format) tasks#create
new_task GET /tasks/new(.:format) tasks#new
edit_task GET /tasks/:id/edit(.:format) tasks#edit
task GET /tasks/:id(.:format) tasks#show
PUT /tasks/:id(.:format) tasks#update
DELETE /tasks/:id(.:format) tasks#destroy
phases GET /phases(.:format) phases#index
POST /phases(.:format) phases#create
new_phase GET /phases/new(.:format) phases#new
edit_phase GET /phases/:id/edit(.:format) phases#edit
phase GET /phases/:id(.:format) phases#show
PUT /phases/:id(.:format) phases#update
DELETE /phases/:id(.:format) phases#destroy
projects GET /projects(.:format) projects#index
POST /projects(.:format) projects#create
new_project GET /projects/new(.:format) projects#new
edit_project GET /projects/:id/edit(.:format) projects#edit
project GET /projects/:id(.:format) projects#show
PUT /projects/:id(.:format) projects#update
DELETE /projects/:id(.:format) projects#destroy
答案 0 :(得分:1)
将此信息放入您的routes.rb:
resources :tasks do
member do
get :change
end
end
它将添加传递任务ID的辅助路径change_task
并将您的链接更改为:
<td><%= link_to t.name, change_task_path(:id => t.id) %>
控制器:
def change
编辑:
要使其成为ajax调用,您做对了,将:remote => true
添加到您的链接中,如下所示:
<%= link_to t.name, change_task_path(:id => t.id), :remote => true %>
这样,您的控制器上的响应应该是js
格式。
def change
# do your thing
respond_to do |format|
format.js
end
end
执行此操作时,您应该在视图文件夹中有一个change.js.erb
文件,该文件会对页面进行所有更改。像这样:
$('#tasks_list').children().remove();
$('#tasks_list').html(
"<%= j(render('tasks_list')) %>"
);
请记住,如果您以这种方式执行操作,则需要部分(_tasks_list.html.erb
)。